C# 访问嵌套泛型类型参数
假设我有这样的代码:C# 访问嵌套泛型类型参数,c#,generics,type-inference,C#,Generics,Type Inference,假设我有这样的代码: // This represents some query that will return type T when executed. public interface IQuery<T> { } // An example query that returns bool public class MyQuery : IQuery<bool> { } // A separate class that's actually responsible
// This represents some query that will return type T when executed.
public interface IQuery<T> { }
// An example query that returns bool
public class MyQuery : IQuery<bool> { }
// A separate class that's actually responsible for executing the queries.
public class Executor {
public T Execute<T>(IQuery<T> query)
}
// Usage
executor.Execute(new MyQuery()) // => true/false
//这表示执行时将返回类型T的某些查询。
公共接口IQuery{}
//返回bool的示例查询
公共类MyQuery:IQuery{}
//一个单独的类,实际负责执行查询。
公共类执行者{
公共T执行(IQuery查询)
}
//用法
executor.Execute(新建MyQuery())/=>true/false
到目前为止没有问题。但是假设我想更改executor类,使其负责查询的实例化。理想情况下,我希望用法类似于:
// Usage
executor.Execute<MyQuery>() // => true/false
//用法
executor.Execute()/>真/假
然而,我似乎找不到一种方法来建模这个方法签名。我能得到的最接近的结果是:
public T Execute<TQuery, T>() where TQuery : IQuery<T>
public T Execute(),其中TQuery:IQuery
此签名的问题在于,它需要显式指定所有类型参数。由于在推断类型参数时不考虑泛型类型约束,因此无法从TQuery
推断T
到目前为止,我发现的唯一解决方法是设置一个伪参数,以帮助从形式参数进行推理。基本上返回到原始示例,但不是使用newmyquery()
传递实际实例,我可以传递类似default(MyQuery)
的内容。这是笨重的,但是,使API一点也不明显
是否有我缺少的一些解决方法?尝试以下操作:
where TQuery:IQuery,new()
,但请注意,您有两个泛型参数这一事实意味着您还需要指定两个泛型参数。可能重复