C# 带有ref变量的Func委托
如何定义此方法的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
完成,但您可以为其定义自定义委托
:
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);