我正在尝试定义一个委托模板(可更改的输入和输出数据类型),如下所示:
public delegate TOut? AB<TIn,out TOut>(TIn? a,TOot? b) where TIn:struct;
我只想让输入和输出值为Nullable。这是我得到的错误:
严重级代码描述项目文件行抑制状态 错误CS1961无效方差:类型参数'TResult'必须在'Delegates.AopB.Invoke(TOperand?,TOperand?)'上不变地有效。 'TResult'是协变的。计算器
答案 0 :(得分:1)
TOut
无法标记为out
。
以下内容将起作用,是您将获得的最接近的内容:
public delegate TOut? AB<TIn, TOut>(TIn? a,TOut? b) where TIn:struct where TOut:struct;
答案 1 :(得分:1)
public delegate TResult? AB<TOperand, TResult>(TOperand? a,TOperand? b) where TOperand:struct where TResult:struct;
请注意,您无法使用in
或out
,因为只有参考类型才会出现差异,并且Nullable<T>
要求T
为值类型。
编辑:既然问题已被编辑,那么它肯定不会有out
,因为除了out
参数外,out
不会对参数起作用。答案现在是:
public delegate TOut? AB<TIn, TOut>(TIn? a,TOut? b) where TIn:struct where TOut:struct;