2016-12-29 36 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) { 

}