如何修复此无效方差修饰符错误?:

时间:2016-12-29 13:20:35

标签: c# .net

 FragRecordSongList FragRecordSongList = new FragRecordSongList();
        FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        ft.addToBackStack(FragRecordSongList.class.getName());
        ft.replace(R.id.fragContainer, FragRecordSongList, FragRecordSongList.class.getName());
        ft.commit();

我收到了这个构建错误:

错误CS1960:无效的方差修饰符。只能将接口和委托类型参数指定为变体。

错误出现在所有逗号上。

2 个答案:

答案 0 :(得分:1)

这不是有效的C#。只有在声明通用委托类型或接口时,才能使用差异修饰符。在这里,您使用委托类型Func<in T1, in T2, in T3, out TResult>

使用类型并指定泛型参数,如SqlConnectionRandom泛型参数 T1 ... T3TResult,您无法指定方差修饰符,因为方差由Func<...>声明

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

这是Func<...>类型的声明(取自reference source):

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

此处声明方差,当您使用Func<>时,您不能也不需要更改它。

答案 1 :(得分:0)

似乎你想传递一个带有3个参数的lambda(SqlConnectionRandomTextBox)并返回Boolean值:

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

}