其中t:多个类

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实现他们自己的行为,然后自己打电话给他们.


Ant*_*ram 6

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