Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有ref变量的Func委托_C#_C# 3.0_Reference_Delegates_Func - Fatal编程技术网

C# 带有ref变量的Func委托

C# 带有ref变量的Func委托,c#,c#-3.0,reference,delegates,func,C#,C# 3.0,Reference,Delegates,Func,如何定义此方法的Func委托?无法通过Func完成,但您可以为其定义自定义委托: public object MethodName(ref float y) { //method } 用法示例: public delegate object MethodNameDelegate(ref float y); 在.NET4+中,您还可以通过这种方式支持ref类型 public object MethodWithRefFloat(ref float y) { return null; }

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

无法通过
Func
完成,但您可以为其定义自定义
委托

public object MethodName(ref float y)
{
//method
}
用法示例:

public delegate object MethodNameDelegate(ref float y);

在.NET4+中,您还可以通过这种方式支持
ref
类型

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

public void MethodCallThroughDelegate()
{
    MethodNameDelegate myDelegate = MethodWithRefFloat;

    float y = 0;
    myDelegate(ref y);
}
公共委托bool MyFuncExtension(字符串输入,ref MyRefType refType);

原因是:所有泛型类型参数必须是可转换为对象的。“ref float”不能转换为object,因此不能将其用作泛型类型参数。谢谢,我一直在努力使用Func,所以我知道为什么当type不能转换为object时我不能使用它。这是否意味着在这种情况下,委托键入将需要装箱/取消装箱?不是为了恢复死线程,但对于遇到这种情况的任何人,都应该明确指出,尽管您可以通过这种方式支持带有泛型的ref-param,泛型类型参数将是不变的。泛型类型参数不支持c#中ref或out参数的方差(协方差或逆变)。不过,如果您不需要担心隐式类型转换,仍然可以。对不起,这个答案有点偏离正轨。您为参数化代表而显示的
in
out
与“协方差”相关,与OP询问的内容无关。问题是关于可以通过引用接受参数的委托,而不是(泛型)委托在类型参数化方面的灵活性。
public delegate bool MyFuncExtension<in string, MyRefType, out Boolean>(string input, ref MyRefType refType);