2017-11-10 68 views
0

我试图定义一个委托模板(可变的输入和输出数据类型),像这样:定义委托模板,可空数据类型

public delegate TOut? AB<TIn,out TOut>(TIn? a,TOot? b) where TIn:struct; 

我只是想使输入和输出值可空。这是我得到的错误:

严重性代码说明项目文件的线路抑制状态 错误CS1961无效方差:“(?TOperand?TOperand)Delegates.AopB.Invoke”的类型参数“TResult”必须是有效目不暇接。 'TResult'是协变的。计算器

+2

那么是什么问题? – Servy

回答

1
public delegate TResult? AB<TOperand, TResult>(TOperand? a,TOperand? b) where TOperand:struct where TResult:struct; 

请注意,您不能使用inout因为方差只能引用类型发生,Nullable<T>需要T是一个值类型。

编辑:现在问题被编辑了,它肯定不能有out那里,因为out将不会在除参数out之外的参数上工作。现在的答案是:

public delegate TOut? AB<TIn, TOut>(TIn? a,TOut? b) where TIn:struct where TOut:struct; 
1

TOut不幸的是不能用out标记。

下面的工作,是最接近你会得到:

public delegate TOut? AB<TIn, TOut>(TIn? a,TOut? b) where TIn:struct where TOut:struct;