Func委托与ref变量

chu*_*h97 52 c# delegates reference func c#-3.0

public object MethodName(ref float y)
{
//method
}
Run Code Online (Sandbox Code Playgroud)

如何为此方法定义Func委托?

Eli*_*sha 83

它无法完成,Func但你可以delegate为它定义一个自定义:

public delegate object MethodNameDelegate(ref float y);
Run Code Online (Sandbox Code Playgroud)

用法示例:

public object MethodWithRefFloat(ref float y)
{
    return null;
}

public void MethodCallThroughDelegate()
{
    MethodNameDelegate myDelegate = MethodWithRefFloat;

    float y = 0;
    myDelegate(ref y);
}
Run Code Online (Sandbox Code Playgroud)

  • 原因是:所有泛型类型参数必须是可转换为对象的东西."ref float"不能转换为object,因此不能将其用作泛型类型参数. (27认同)

Sli*_*SFT 6

在.NET 4+中,您也可以通过ref这种方式支持类型...

public delegate bool MyFuncExtension<in string, MyRefType, out Boolean>(string input, ref MyRefType refType);
Run Code Online (Sandbox Code Playgroud)

  • 对不起,这个答案有点偏离轨道.你所展示的用于参与代表的`in`和`out`属于co-versus"contra-variance",与OP所询问的内容无关.问题是关于可以通过引用接受参数的委托,而不是(通用)委托关于其类型参数化的敏捷性. (4认同)
  • 不要复活一个死线程但是对于遇到这种情况的任何人都应该注意到,虽然你可以通过这种方式支持带有泛型的ref参数,但泛型类型参数将是不变的.通用类型参数不支持c#中ref或out参数的方差(协方差或逆变).如果您不需要担心隐式类型转换,那么仍然可以. (2认同)