TypeConverter的使用快速转换类型

详见以下示例

 public class Program
    {
        public static void Main(string[] args)
        {
            var source = new Dictionary<string, string>
            {
                ["point"] = "(123,456)"
            };
			//MemoryConfigurationProvider使用内存中集合作为配置键值对。若要激活内存中集合配置,请在
			//ConfigurationBuilder的实例上调用AddInMemoryCollection扩展方法。可以使用
			//IEnumerable<KeyValuePair<String,String>> 初始化配置提供程序。构建主机时调用
			//ConfigureAppConfiguration以指定应用程序的配置:
            var root = new ConfigurationBuilder().AddInMemoryCollection(source).Build();
            //在这里调用TypeConverter
            var point = root.GetValue<Point>("point");
            Console.WriteLine(point.X);
            Console.WriteLine(point.Y);
            Console.ReadKey();
           
        }
    }
    //注册了一个类型为PointTypeConverter的TypeConverter,
    //PointTypeConvert通过实现的ConvertForm方法将坐标的字符串表达式转换为一个Point对象
    [TypeConverter(typeof(PointTypeConverter))]
    public class Point
    { 
        public double X { get; set; }
        public double Y { get; set; }
    }
    public class PointTypeConverter : TypeConverter
    {
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) => sourceType == typeof(string);
        public override Object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            string[] split = value.ToString().Split(',');
            double x = double.Parse(split[0].Trim().TrimStart('('));
            double y = double.Parse(split[1].Trim().TrimEnd(')'));
            return new Point {X=x,Y=y };
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值