如何检查方法参数是否实现多个接口

时间:2017-05-26 15:56:46

标签: c# interface constraints

有没有办法使用约束来检查方法参数是否实现了多个接口?

以这个简单的例子来检查TResponse是否实现了IBaseSearchResponse:

public static TResponse Search<TResponse, TRequest>(TRequest args)
    where TResponse : IBaseSearchResponse {}

但我想知道它是否实现了IBaseSearchProps。 我曾尝试通过以下方式添加约束:

public static TResponse Search<TResponse, TRequest>(TRequest args)
    where TResponse : IBaseSearchArgs where TResponse : IBaseSearchProps {}

但是这会报告已经用于TResponse类型的约束条款 和

public static TResponse Search<TResponse, TRequest>(TRequest args)
    where TResponse : (IBaseSearchArgs && IBaseSearchProps) {}

这只是非法语法

如果我的问题准备不足,在其他地方回答,或者如果答案在c#规范中定义,我事先道歉,我至少在这里看了一下

2 个答案:

答案 0 :(得分:6)

您需要用逗号(,)分隔它们:

e.g。

public static TResponse Search<TResponse, TRequest>(TRequest args)
where TResponse : IBaseSearchArgs , IBaseSearchProps {...}

答案 1 :(得分:2)

这是逗号分隔的列表:

public void F<T>(T t) 
    where T : IEnumerable, IFooBar
{
}