2010-10-24 52 views
60
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 }); 
    } 
} 

我该如何投valueparamTypevaluestring,paramType可能只是基本类型,如int,string或者可能float。如果没有可能的转换,我很酷并抛出异常。将变量转换为仅在运行时已知的类型?

+1

可能重复的[?如何查找和调用的.Net的TypeConverter用于特定类型](http://stackoverflow.com/questions/956076/how-to-lookup-and-invoke -a-net-typeconverter-for-a-specific-type) – 2010-10-24 20:05:40

+0

可能出现[如何查找和调用特定类型的.Net TypeConverter?](http://stackoverflow.com/questions/956076/how-查找和调用一个特定类型的网络类型转换器) – 2017-03-16 10:18:20

回答

62

您使用的所有类型均为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

12

你可以去动态;例如:

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; } 
     } 
    } 
} 
相关问题