在IEnumerable <T>中获取T的类型

Sae*_*eid 2 c# generics types .net-4.0

这是我的通用类:

public class MyClass<T>
{
    public T MainModel { get; set; }

    public Type GetType()
    {
        //here
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我用这个形式:

List<MySecondClass> Myinstance = new List<MySecondClass>();

MyClass<IEnumerable<MySecondClass>> mainInstance = new  MyClass<IEnumerable<MySecondClass>> { MainModel = Myinstance  };
Run Code Online (Sandbox Code Playgroud)

所以我需要GetType()Method返回typeof(MySecondClass)你的建议是什么?

更新

我必须提一下,总是使用MyClass两种形式:第一种:我在上面和第二种中完全编码:

ThirdClass thirdone = new ThirdClass(); 
MyClass<ThirdClass> = new MyClass<ThirdClass>(){ MainModel = thirdone};
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 6

如果T是的话List<T>

// add error checking to taste
var typeOfEnumerable = typeof(T).GetInterfaces().Where(i => i.IsGenericType)
    .Single(i => i.GetGenericTypeDefinition() == typeof(IEnumerable<>))
    .GetGenericArguments().First();
Run Code Online (Sandbox Code Playgroud)

看到它在行动.

如果T是的话IEnumerable<T>

// add error checking to taste
var typeOfEnumerable = typeof(T).GetGenericArguments().First();
Run Code Online (Sandbox Code Playgroud)

重要笔记

你真的应该考虑一下MyClass这里要做什么.为什么要T成为一个特殊情况IEnumerable<X>呢?也许应该增加一些限制T?如果没有更具体的信息,就不可能回答这些问题和其他重要问题,但你真的应该这样做.

另外,您GetType是偶然还是故意命名方法?这样隐藏真的,真的,真的不是一个好主意object.GetType,所以我建议你重命名那个方法.