在C#中,你可以将Or放在"where"接口约束中吗?

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)

所以它会接受任何支持两个接口之一的东西.我基本上试图创建一个重载.

Dan*_*mms 2

该语言不支持在子句中将接口/类“或”在一起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)

我不知道上下文,但上面的内容可能就是您正在寻找的内容。