leo*_*ora 5 c# generics interface
如果我有这个代码:
public interface IJobHelper
{
List<T> FilterwithinOrg<T>(IEnumerable<T> entities) where T : IFilterable;
}
Run Code Online (Sandbox Code Playgroud)
有什么东西支持做这样的事情:
public interface IJobHelper
{
List<T> FilterwithinOrg<T>(IEnumerable<T> entities) where T : IFilterable or ISemiFilterable
}
Run Code Online (Sandbox Code Playgroud)
所以它会接受任何支持两个接口之一的东西.我基本上试图创建一个重载.
该语言不支持在子句中将接口/类“或”在一起where
。
您需要使用不同的方法名称分别声明它们,以便签名不同。
public interface IJobHelper
{
List<T> FilterwithinOrg<T>(IEnumerable<T> entities)
where T : IFilterable
List<T> SemiFilterwithinOrg<T>(IEnumerable<T> entities)
where T : ISemiFilterable
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以在两个接口上实现一个公共接口。这与上面的不同,因为如果您需要一个未包含在IBaseFilterable
.
public interface IBaseFilterable { }
public interface IFilterable : IBaseFilterable { }
public interface ISemiFilterable : IBaseFilterable { }
public interface IJobHelper
{
List<T> FilterwithinOrg<T>(IEnumerable<T> entities)
where T : IBaseFilterable
}
Run Code Online (Sandbox Code Playgroud)
我不知道上下文,但上面的内容可能就是您正在寻找的内容。