定义委托模板,可空数据类型
问题描述:
我试图定义一个委托模板(可变的输入和输出数据类型),像这样:定义委托模板,可空数据类型
public delegate TOut? AB<TIn,out TOut>(TIn? a,TOot? b) where TIn:struct;
我只是想使输入和输出值可空。这是我得到的错误:
严重性代码说明项目文件的线路抑制状态 错误CS1961无效方差:“(?TOperand?TOperand)Delegates.AopB.Invoke”的类型参数“TResult”必须是有效目不暇接。 'TResult'是协变的。计算器
答
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;
答
TOut
不幸的是不能用out
标记。
下面的工作,是最接近你会得到:
public delegate TOut? AB<TIn, TOut>(TIn? a,TOut? b) where TIn:struct where TOut:struct;
那么是什么问题? – Servy