将变量转换为仅在运行时已知的类型?
问题描述:
foreach (var filter in filters)
{
var filterType = typeof(Filters);
var method = filterType.GetMethod(filter, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static);
if (method != null)
{
var parameters = method.GetParameters();
Type paramType = parameters[0].ParameterType;
value = (string)method.Invoke(null, new[] { value });
}
}
我该如何投value
到paramType
? value
是string
,paramType
可能只是基本类型,如int
,string
或者可能float
。如果没有可能的转换,我很酷并抛出异常。将变量转换为仅在运行时已知的类型?
答
您使用的所有类型均为IConvertible
。因此您可以使用ChangeType
。
value = Convert.ChangeType(method.Invoke(null, new[] { value }), paramType);
+7
真棒......在单行中。 var value = Convert.ChangeType(objectValue,objectType); – Rigin 2016-06-01 15:08:09
答
你可以去动态;例如:
using System;
namespace TypeCaster
{
class Program
{
internal static void Main(string[] args)
{
Parent p = new Parent() { name = "I am the parent", type = "TypeCaster.ChildA" };
dynamic a = Convert.ChangeType(new ChildA(p.name), Type.GetType(p.type));
Console.WriteLine(a.Name);
p.type = "TypeCaster.ChildB";
dynamic b = Convert.ChangeType(new ChildB(p.name), Type.GetType(p.type));
Console.WriteLine(b.Name);
}
}
internal class Parent
{
internal string type { get; set; }
internal string name { get; set; }
internal Parent() { }
}
internal class ChildA : Parent
{
internal ChildA(string name)
{
base.name = name + " in A";
}
public string Name
{
get { return base.name; }
}
}
internal class ChildB : Parent
{
internal ChildB(string name)
{
base.name = name + " in B";
}
public string Name
{
get { return base.name; }
}
}
}
的
可能重复的[?如何查找和调用的.Net的TypeConverter用于特定类型](http://*.com/questions/956076/how-to-lookup-and-invoke -a-net-typeconverter-for-a-specific-type) – 2010-10-24 20:05:40
可能出现[如何查找和调用特定类型的.Net TypeConverter?](http://*.com/questions/956076/how-查找和调用一个特定类型的网络类型转换器) – 2017-03-16 10:18:20