具有动态计数类型参数的通用类型

时间:2012-02-23 09:52:00

标签: c# generics

如何定义类型列表以便我可以将其用作:

var l1 = new List<int>();
var l2 = new List<int, long>();
var l3 = new List<int, long, byte>();

3 个答案:

答案 0 :(得分:2)

您可以使用元组列表:

var l1 = new List<int>();
var l2 = new List<Tuple<int, long>>();
var l3 = new List<Tuple<int, long, byte>>();

答案 1 :(得分:1)

假设您想从l3列表中获取第3项 - 您会怎么做?

如果你的回答是&#34;我会将其投放到long,因为intbyte都可以转换为long&#34; ,你应该首先使用List<long>

如果您要对检索到的类型使用l3[3].GetType()if else,则应考虑使用List<object>,因为您将项目视为&#34;未知类型&#34;。

答案 2 :(得分:0)

所以,我找到了解决方案。它需要定义基类型List:

 class List    {  }

并从中继承了许多孩子:

class List<T>    {  }

class List<T, T1> : List<T> { }

class List<T, T1, T2> : List<T> { }

(继承不一定,但如果List可以转换为List,则需要继承)

基本列表构造函数可以获取所有应用的通用参数:

class List
{
    Type[] _types;

    public List()
    {
        _types = GetType().GetGenericArguments();
    }
}