2010-10-24 4 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 }); 
    } 
} 

मैं value से paramType कैसे डाल सकता हूं? valuestring है, paramType शायद int, string, या शायद float जैसे मूल प्रकार का मूल प्रकार होगा। यदि कोई रूपांतरण संभव नहीं है तो मैं अपवाद फेंकने के साथ शांत हूं।वैरिएबल कनवर्ट करने के लिए केवल रन-टाइम पर जाना जाता है?

+1

संभव डुप्लिकेट [? देखने और एक विशेष प्रकार के लिए एक नेट TypeConverter आह्वान करने के लिए कैसे] (http://stackoverflow.com/questions/956076/how-to-lookup-and-invoke -a-net-typeconverter-for-a-special-type) –

+0

संभावित डुप्लिकेट [कैसे एक विशेष प्रकार के लिए .Net TypeConverter को देखने और आमंत्रित करने के लिए?] (http://stackoverflow.com/questions/956076/how- टू-लुकअप-एंड-इनवॉक-ए-नेट-टाइपकॉन्टर-फॉर-ए-स्पेशल-टाइप) –

उत्तर

62

आप जिस प्रकार का उपयोग कर रहे हैं IConvertible लागू करें। इस प्रकार आप ChangeType का उपयोग कर सकते हैं।

value = Convert.ChangeType(method.Invoke(null, new[] { value }), paramType); 
+7

कमाल ... एकल लाइन में। var value = कनवर्ट करें। चेंजटाइप (ऑब्जेक्ट वैल्यू, ऑब्जेक्ट टाइप); – Rigin

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; } 
     } 
    } 
} 
की
संबंधित मुद्दे