其中t:多个类

时间:2010-06-29 12:41:20

标签: c# generics type-parameter

List<T> Foo<T>(Ilist list) 
where T : ??

有没有办法强制执行T 少数几个班级之一?

最终我想要开启T ..

感谢。

5 个答案:

答案 0 :(得分:15)

您可以要求允许列表中允许的每个类实现某个界面ISomething,然后创建List<ISomething>

  

最终我想要开启T ..

不是在对象类型上进行切换,而是在界面中使用方法并为每个类实现不同的方法可能更好。

答案 1 :(得分:10)

以这种方式实施类型约束表示这几个类与常用功能相关。

您应该实现一个通用接口,然后将类型限制为该接口:

public interface IUseful
{
    public void UsefulMethod();
}

List<T> Foo<T>(IList list) where T : IUseful
{
    // You now have access to all common functionality defined in IUseful
}

额外的好处是,现在您不必打开T来实现不同的行为。您可以让IUseful的孩子实施自己的行为,然后自己打电话。

答案 2 :(得分:6)

在这种情况下,T可以是列出对象共享的公共基类或接口。您可以拥有List<IFoo>,如果每个实现Foo, Bar, and Baz接口,则列表可以包含类IFoo。如果没有使用继承,你将会遇到一个对象列表。

答案 3 :(得分:2)

你想要什么?冒号后,您可以枚举约束T的类型。

对于多个类,可能实现一个通用接口并将约束设置为它可能会起到作用。

请查看此链接以获取更多详细信息:Constraints on Type Parameters (C# Programming Guide)

答案 4 :(得分:1)

据我所知,这是不可能的。我建议从公共基类或接口派生有限的类集。