泛型类型转换FROM字符串
我有一个我想用来存储另一个类的“属性”的类。 这些属性只有一个名称和一个值。 理想情况下,我希望能够添加类型化属性,以便返回的“值”始终是我希望的类型。
该类型应该始终是原始的。 这个类继承了一个抽象类,它基本上将字符串的名称和值存储起来。 这个想法是,这个子类将为基类增加一些类型安全性(以及节省我的一些转换)。
所以,我创建了一个类(大致):
public class TypedProperty<DataType> : Property
{
public DataType TypedValue
{
get { // Having problems here! }
set { base.Value = value.ToString();}
}
}
所以问题是:
有没有一种“通用”的方式来从字符串转换回原始?
我似乎无法找到任何通用的接口来连接整个板子上的转换(类似ITryParsable会是理想的!)。
我不确定我是否正确理解你的意图,但让我们看看这个是否有帮助。
public class TypedProperty<T> : Property where T : IConvertible
{
public T TypedValue
{
get { return (T)Convert.ChangeType(base.Value, typeof(T)); }
set { base.Value = value.ToString();}
}
}
lubos hasko的方法不适用于可空数据。 下面的方法适用于可空数据。 不过,我没有想到它。 我通过谷歌发现它:http://web.archive.org/web/20101214042641/http://dogaoztuzun.com/post/C-Generic-Type-Conversion.aspx信用“金枪鱼Toksoz”
用法第一:
TConverter.ChangeType<T>(StringValue);
这个班级在下面。
public static class TConverter
{
public static T ChangeType<T>(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<T, TC>() where TC : TypeConverter
{
TypeDescriptor.AddAttributes(typeof(T), new TypeConverterAttribute(typeof(TC)));
}
}
对于许多类型(整数,双精度,DateTime等),有一个静态的Parse方法。 你可以使用反射来调用它:
MethodInfo m = typeof(T).GetMethod("Parse", new Type[] { typeof(string) } );
if (m != null)
{
return m.Invoke(null, new object[] { base.Value });
}
链接地址: http://www.djcxy.com/p/39427.html