我怎么可以转换的类型在运行时?
-
10-07-2019 - |
题
我的情况应该是简单的...这种类型我想转换 从 是 总是 'string'.我想转换。可能是很多东西-整数,DateTimes,...串,等等。
这将是容易的:
string valueToConvertFrom = "123";
int blah = Convert.ToInt32(valueToConvertFrom);
但是...我不知道(直到运行)的价值,我需要转换为是一个'Int'(或者).我已经尝试这样的:
string valueToConvertFrom = "123";
Type convertToType = typeof(int);
object blah = Convert.ChangeType(valueToConvertFrom, convertToType);
但是,让我下错误:"对象而必须实现请参."
我不想要做一个开关的声明和呼叫"转换。ToBlah"基于种类型的名字...任何建议?
解决方案
干净的方法是使用TypeConverter。 您可以通过调用 TypeDescriptor来获取类型转换器的实例.GetConverter 然后使用类型转换器的实例来进行转换。 所以像这样:
string valueToConvertFrom = "123";
Type convertToType = typeof(int);
TypeConverter tc = TypeDescriptor.GetConverter(convertToType);
object blah =tc.ConvertFromString(valueToConvertFrom);
其他提示
String类实现了IConvertible,这段代码应该很简单。您打算使用哪个版本的.NET?
object o = Convert.ChangeType( str, convertToType );
此外,你提到的大多数类型都实现了Parse方法,所以你最好的镜头可能是这样的。
Type convertToType = ...;
MethodInfo mi = convertToType.GetMethod("Parse", BindingFlags.Static);
object blah;
if(mi != null)
{
blah = mi.Invoke(null, new object[]{valueToConvertFrom});
}
else
{
// the type doesn't implement the Parse method, handle it another way :/
}
Timothy的问题,因为适用一般的问题的类型转换。净是一个非常大的问题。同时,转换战略是有些简单明了在特定情况下,与已知类型,不幸的是,没有广义的战略,在任何执行的。净完成类型转换在运行时间从一个任意的类型,也是这一战略将由雷蒙德然而,Microsoft提供一些良好的指导方针的一般概念的类型转换,其中包括:
我们不得不处理同样的一般性问题在我的系统,作为解决我必须综合所有的标准战略纳入一个方法。的范围这一问题是广泛和有关的转换战略是多种多样,因此这种合并方法可能只会在一个完整的技术文章。然而,我在这里提供一份我的方法文件,希望这将有助于你获得一个公司把握总的需求你需要地址如果你想开发一个类似的,广义的解决方案。这里就是链接到我的文件:
我希望这可以帮助你,
标记
不隶属于 StackOverflow