-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.Nameor "int""string"它实际上是该类型的字符串表示形式。

但是我怎样才能得到真正的 mypara 类型呢?

4

3 回答 3

0

一个代码示例会很有帮助,但是我认为您需要的只是obj.GetType()?这就是您获取对象类型的方式。

于 2012-04-09T13:25:29.853 回答
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>;
        }
    }
}

参考:
使用反射获取泛型实例泛型类型反射
泛型列表类型的属性
反射和泛型类型

于 2012-04-09T13:35:28.483 回答
0

使用反射。任何对象上的 GetType() 都将获取类型的名称。需要更多的反射才能使其成为对象类型。

于 2012-04-09T13:36:02.867 回答