List <t>定义为类</t>的成员

时间:2010-10-30 13:25:53

标签: c#

我有一个列表,我希望通过调用来确定类型,例如在我希望类似的类中

public class ClassName
{
    public ListType<T> ListName { get; set; }
    // other class items
}

然后用法设置类类型

var className = new ClassName()
{
    ListType<int> = data
};

所以基本上就是我想要的,我让它使用动态,所以类是

public class ClassName
{
    public ListType<dynamic> ListName { get; set; }
    // other class items
}

,电话是

var className = new ClassName()
{
    ListType<dynamic> = data
};

这有效,但我想知道是否有更好的方法来做到这一点,所以我不必使用动态

哦,差点忘了提到ListType是

public class ListType<T> : List<T>
{
}

因为传递不同的类型而失败

感谢

编辑: 意识到我对堆栈溢出的代码的使用与我的代码不同

ListType有一个构造函数,它带有3个参数,因此用法更多

var className = new ClassName()
{
    ListName = new ListType<Type>(x, y, z)
}

2 个答案:

答案 0 :(得分:3)

怎么样

public class ClassName<T>
{
    public ListType<T> ListName { get; set; }
    // other class items
}

然后像这样使用它:

var className = new ClassName<int>()
{
    ListName = data;
};

答案 1 :(得分:1)

Bertrand的回答略有补充,为您提供了一种不在特定用例中重复类型参数的方法,甚至不提及它:

public static class ClassName
{
    public static ClassName<T> Create<T>(ListType<T> list)
    {
        return new ClassName<T> { ListName = list };
    }

    public static ClassName<T> Create<T>(params T[] list)
    {
        return new ClassName<T> { ListName = new ListType<T>(list) };
    }
}

使用第一种方法,您可以编写类似

的内容
ClassName.Create(new ListType<SomeType>(x, y, z));

使用第二种方法,你甚至可以写

ClassName.Create(x, y, z);

让编译器确定TSomeType,但这并不总是有效。

请注意,ClassNameClassName<T>不同,您可能希望以不同方式命名,例如ClassNameFactory