yon*_*oni 6 c# generics type-parameter
List<T> Foo<T>(Ilist list)
where T : ??
Run Code Online (Sandbox Code Playgroud)
有没有办法强制T成为
少数几个类之一?
最终我想对T进行切换..
谢谢.
Mar*_*ers 15
您可以要求允许列表中允许的每个类实现一些接口ISomething,然后创建一个List<ISomething>.
最终我想对T进行切换..
不是切换对象的类型,而是在接口中使用方法并为每个类实现不同的方法可能更好.
Jus*_*ner 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
}
Run Code Online (Sandbox Code Playgroud)
额外的好处是,现在您不必开启T实现不同的行为.你可以让孩子们IUseful实现他们自己的行为,然后自己打电话给他们.
在这种情况下,T可以是列出对象共享的公共基类或接口.你可以拥有List<IFoo>,Foo, Bar, and Baz如果每个实现IFoo接口,列表可以包含类.如果不使用继承,您将会遇到一个对象列表.