2016-12-29 66 views
0
private void checkTheCheckInterval(Func<in SqlConnection, in Random, in TextBox, out Boolean> myFunc) { 

} 

我得到這個生成錯誤:如何解決這個無效的方差修正錯誤?:

錯誤CS1960:無效的方差修改。只有接口和委託類型參數可以指定爲變體。

該錯誤出現在所有逗號。

+2

'私人無效checkTheCheckInterval(Func鍵 myFunc的)'?只是刪除所有關於C#*協方差*的'in'和'out',而不是參數? –

+0

@DmitryBychenko謝謝!發佈你的答案,我會選擇它。 – nicomp

回答

1

這是無效的C#。只有當您聲明通用代理類型或接口時,才能使用差異修飾符。這裏你使用委託類型Func<in T1, in T2, in T3, out TResult>

當你使用的類型,並指定像SqlConnection通用參數Random等爲泛型參數T1 ... T3TResult,你不能specifiy方差改性劑,因爲方差通過Func<...>聲明

private void checkTheCheckInterval(Func<SqlConnection, Random, TextBox, Boolean> myFunc) 
{ 
} 

這是類型的聲明(從reference source拍攝):

public delegate TResult Func<in T1, in T2, in T3, out TResult>(T1 arg1, T2 arg2, T3 arg3); 

這裏方差聲明,你不能也不需要在使用Func<>去改變它。

0

看來你想傳遞一個lambda包含3個參數(SqlConnectionRandomTextBox),並返回Boolean值:

private void checkTheCheckInterval(Func<SqlConnection, Random, TextBox, Boolean> myFunc) { 

}