ctr*_*yan 47 .net c# type-conversion
我有一个Type,一个String和一个Object.
有没有什么方法可以调用parse方法或动态地在字符串上转换为该类型?
基本上我该如何删除此逻辑中的if语句
object value = new object();
String myString = "something";
Type propType = p.PropertyType;
if(propType == Type.GetType("DateTime"))
{
value = DateTime.Parse(myString);
}
if (propType == Type.GetType("int"))
{
value = int.Parse(myString);
}
Run Code Online (Sandbox Code Playgroud)
并做更像这样的事情.
object value = new object();
String myString = "something";
Type propType = p.PropertyType;
//this doesn't actually work
value = propType .Parse(myString);
Run Code Online (Sandbox Code Playgroud)
Ant*_*lev 80
TypeDescriptor
营救:
var converter = TypeDescriptor.GetConverter(propType);
var result = converter.ConvertFrom(myString);
Run Code Online (Sandbox Code Playgroud)
要集成到TypeConverter
基础结构中,请TypeConverter
使用它来实现您自己的和装饰类以进行转换TypeConverterAttribute
Tho*_*que 15
这适用于所有原始类型以及实现的类型 IConvertible
public static T ConvertTo<T>(object value)
{
return (T)Convert.ChangeType(value, typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
编辑:实际上在你的情况下,你不能使用泛型(至少不容易).相反,你可以这样做:
object value = Convert.ChangeType(myString, propType);
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题,这就是我解决它的方法:
value = myString;
var parse = propType.GetMethod("Parse", new[] { typeof(string) });
if (parse != null) {
value = parse.Invoke(null, new object[] { value });
}
Run Code Online (Sandbox Code Playgroud)
......它对我有用.
总结一下,您试图在对象类型上找到一个静态"Parse"方法,该方法只接受一个字符串作为参数.如果找到这样的方法,则使用您尝试转换的字符串参数调用它.由于p是我的类型的PropertyInfo,我通过使用如下值设置我的实例来结束此方法:
p.SetValue(instance, value, null);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32006 次 |
最近记录: |