通过泛型参数进行转换

时间:2012-04-09 13:23:02

标签: c# types casting

我正在尝试使用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 个答案:

答案 0 :(得分:0)

代码示例会有所帮助,但我认为您需要的只是obj.GetType()?这就是你得到一个对象类型的方法。

答案 1 :(得分: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

答案 2 :(得分:0)

使用反射。任何对象上的GetType()都将获得该类型的名称。需要更多的反射来使它成为对象类型。