List<T> Foo<T>(Ilist list)
where T : ??
有没有办法强制执行T 少数几个班级之一?
最终我想要开启T ..
感谢。
答案 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)
据我所知,这是不可能的。我建议从公共基类或接口派生有限的类集。