2012-04-09 7 views
-1

myparaは一般的な引数であり、 (foo<mypara>)objのように、C#の汎用引数を使用してオブジェクトをキャストしようとしています。汎用引数によるキャスト

public class foo<T> 
{ 
    public string name {get;set;} 
    public func<T> value {get;set;} 
} 

var mypara = myfoo.GetType().GetGenericArguments(); 

mypara.Nameの値が実際にタイプの文字列表現である、"int"又は"string"あります。

しかし、どのように実際のタイプのマイパラを得ることができますか?

+3

説明するコードを追加できませんでした –

+1

あなたの問題を示す簡単な例を追加してください。申し訳ありませんが、あなたの求めるものが何であるかは分かりません。 – asawyer

+0

'obj as foo 'はより良い構文です。 http://msdn.microsoft.com/en-us/library/cc488006.aspx – SouthShoreAK

答えて

0

コード例が参考になりますが、必要なのはobj.GetType()だと思いますか?それはあなたがオブジェクトのタイプを得る方法です。

0

あなたはこのようにそれを行うことができます。

if (value != null) 
{ 
    if (value.GetType().IsGenericType == true 
     && value.GetType().GetGenericArguments().Length >= 0) 
    { 
     IList _valuesList = null; 

     if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("int")) 
     { 
      _valuesList = value as List<int>; 
     } 
     else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("decimal")) 
     { 
      _valuesList = value as List<decimal>; 
     } 
     else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("double")) 
     { 
      _valuesList = value as List<double>; 
     } 
     else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("string")) 
     { 
      _valuesList = value as List<string>; 
     } 
    } 
} 

参考:
Get generic instance generic type using reflection
Reflection a properties of type of generic list
Reflection and generic types

0

使用反射を。任意のオブジェクトのGetType()は型の名前を取得します。そのオブジェクト型にするためには、より多くの反射が必要です。

関連する問題