Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模板&x27;d接口冲突_C# - Fatal编程技术网

C# 模板&x27;d接口冲突

C# 模板&x27;d接口冲突,c#,C#,我想知道是否有一个聪明的技巧来实现下面的代码而不与IUseCase和IUseCase冲突,或者模拟这些情况 public interface IUseCase<in TInput, out TOutput> { TOutput Execute(TInput input); } public interface IUseCase<in TInput> { void Execute(TInput input); } public interface IUseC

我想知道是否有一个聪明的技巧来实现下面的代码而不与
IUseCase
IUseCase
冲突,或者模拟这些情况

public interface IUseCase<in TInput, out TOutput>
{
   TOutput Execute(TInput input);
}

public interface IUseCase<in TInput>
{
   void Execute(TInput input);
}

public interface IUseCase<out TOutput>
{
    TOutput Execute();
}
公共接口IUseCase
{
TOutput执行(TInput输入);
}
公共接口IUseCase
{
无效执行(TInput输入);
}
公共接口IUseCase
{
TOutput Execute();
}

似乎无法声明两个具有相同名称但不同模板约束的通用接口,尽管我无法在MSDN和C语言规范中找到证明

若两种类型仅因协方差修饰符或类型约束不同,编译器将发出“已包含定义”错误。例如,尽管泛型类型具有不同的约束,但以下示例也不会编译:

public interface IFoo<T> where T : class
{
  T Bar();
}

public interface IFoo<T> where T : struct
{
  void Bar(T x);
}
公共接口IFoo,其中T:class
{
T-Bar();
}
公共接口IFoo,其中T:struct
{
空心钢筋(tx);
}
但如果泛型参数的数量不同,则被视为不同的类型


所以你的问题的答案是-不,你不能这样做,除非你重新命名你的接口。

只是问:你确定你在协方差和逆变换的上下文中正确使用了
in
out
修饰符吗?我正要离开这里。我也算了很多,但希望有人有一个超级巧妙的技巧来模仿它(我最后只是做了一个EmptyInput接口来填充输入。感觉真的很恶心。