当前位置:  开发笔记 > 编程语言 > 正文

通用类型转换FROM字符串

如何解决《通用类型转换FROM字符串》经验,为你挑选了4个好方法。

我有一个类,我想用它来存储另一个类的"属性".这些属性只有名称和值.理想情况下,我想要的是能够添加类型属性,以便返回的"值"始终是我想要的类型.

类型应该始终是原始的.此类是一个抽象类的子类,它基本上将名称和值存储为字符串.这个想法是这个子类将为基类添加一些类型安全性(以及节省我的一些转换).

所以,我创建了一个类(大致)这个:

public class TypedProperty : Property
{
    public DataType TypedValue
    {
        get { // Having problems here! }
        set { base.Value = value.ToString();}
    }
}

所以问题是:

是否有一种"通用"方式从字符串转换回原语?

我似乎找不到任何通用的界面来连接整个转换(像ITryParsable这样理想!).



1> lubos hasko..:

我不确定我是否理解你的意图,但让我们看看这个是否有帮助.

public class TypedProperty : Property where T : IConvertible
{
    public T TypedValue
    {
        get { return (T)Convert.ChangeType(base.Value, typeof(T)); }
        set { base.Value = value.ToString();}
    }
}


我肯定会添加T:IConvertible
这仅适用于您的类型实现IConvertible
类型T不应该是IConvertible,但类型为base.Value应该.
我同意,虽然`Convert.ChangeType`不是非常通用和可扩展的解决方案,但它适用于大多数基本类型.如果需要更好的东西,将这种方法包装成像Tim建议的更大的方法或完全使用不同的转换方法是没有问题的.

2> 小智..:

lubos hasko的方法因为无法控制而失败.以下方法适用于无效.不过,我没想出来.我通过Google找到了它:http: //web.archive.org/web/20101214042641/http://dogaoztuzun.com/post/C-Generic-Type-Conversion.aspx归功于"Tuna Toksoz"

用法优先:

TConverter.ChangeType(StringValue);  

课程如下.

public static class TConverter
{
    public static T ChangeType(object value)
    {
        return (T)ChangeType(typeof(T), value);
    }

    public static object ChangeType(Type t, object value)
    {
        TypeConverter tc = TypeDescriptor.GetConverter(t);
        return tc.ConvertFrom(value);
    }

    public static void RegisterTypeConverter() where TC : TypeConverter
    {

        TypeDescriptor.AddAttributes(typeof(T), new TypeConverterAttribute(typeof(TC)));
    }
}


为什么使用RegisterTypeConverter?我们需要事先注册转换器吗?(不幸的是,链接已死,所以我无法阅读它)

3> dbkk..:

对于许多类型(整数,双精度,日期时间等),有一个静态Parse方法.您可以使用反射调用它:

MethodInfo m = typeof(T).GetMethod("Parse", new Type[] { typeof(string) } );

if (m != null)
{
    return m.Invoke(null, new object[] { base.Value });
}



4> 小智..:
TypeDescriptor.GetConverter(PropertyObject).ConvertFrom(Value)

TypeDescriptor是具有GetConvertor接受Type对象的方法的类,然后您可以调用ConvertFrom方法来转换该value指定对象.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有