使用Nullable数据类型定义委托模板

时间:2017-11-10 20:10:50

标签: c# visual-studio

我正在尝试定义一个委托模板(可更改的输入和输出数据类型),如下所示:

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

我只想让输入和输出值为Nullable。这是我得到的错误:

严重级代码描述项目文件行抑制状态 错误CS1961无效方差:类型参数'TResult'必须在'Delegates.AopB.Invoke(TOperand?,TOperand?)'上不变地有效。 'TResult'是协变的。计算器

2 个答案:

答案 0 :(得分:1)

不幸的是,{p> 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;

请注意,您无法使用inout,因为只有参考类型才会出现差异,并且Nullable<T>要求T为值类型。

编辑:既然问题已被编辑,那么它肯定不会有out,因为除了out参数外,out不会对参数起作用。答案现在是:

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