2017-11-10 69 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;