2012-04-09 124 views
-1

我想在C#中使用泛型參數來施放對象,如 (foo<mypara>)obj其中mypara是一個通用參數。通過泛型參數鑄造

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

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

其中mypara.Name值爲"int""string"或,這實際上是該類型的字符串表示。

但是我怎樣才能得到mypara的真正類型?

+3

添加一些代碼來解釋不會傷害 – 2012-04-09 13:24:27

+1

請添加一個簡單的例子來說明你的問題,我很抱歉,但我無法理解你的問題。 – asawyer 2012-04-09 13:25:24

+0

'obj as foo '是一個更好的語法。 http://msdn.microsoft.com/en-us/library/cc488006.aspx – SouthShoreAK 2012-04-09 13:28:50

回答

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()都將獲得該類型的名稱。更多的思考是必要的,以使其成爲該對象類型。