Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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# 具有引用参数/参数或匿名函数的Func/Action委托_C#_Delegates_Lambda_Inline_Anonymous Function - Fatal编程技术网

C# 具有引用参数/参数或匿名函数的Func/Action委托

C# 具有引用参数/参数或匿名函数的Func/Action委托,c#,delegates,lambda,inline,anonymous-function,C#,Delegates,Lambda,Inline,Anonymous Function,我只是想知道,委托和内联lambda函数的ref和out参数的确切语法是什么 这里有一个例子 如果函数定义为 public void DoSomething(int withValue) { } public void DoSomething(ref int withValue) { withValue = 3; } 函数中的委托可以通过以下方式创建: public void f() { Action<int> f2 = DoSomething;

我只是想知道,委托和内联lambda函数的
ref
out
参数的确切语法是什么

这里有一个例子

如果函数定义为

 public void DoSomething(int withValue) { } 
 public void DoSomething(ref int withValue) { withValue = 3; } 
函数中的委托可以通过以下方式创建:

 public void f()
 {   
     Action<int> f2 = DoSomething;
     f2(3);
 }

您需要为此方法签名定义新的委托类型:

delegate void RefAction<in T>(ref T obj);

public void F()
{
    RefAction<int> f2 = DoSomething;
    int x = 0;
    f2(ref x);
}
代表无效重构(参考T obj);
公共空间F()
{
重构f2=剂量测定法;
int x=0;
f2(参考文献x);
}

.NET Framework不包含此类型的原因可能是
ref
参数不是很常见,如果为每个可能的组合添加一个委托类型,则所需类型的数量会激增。

您不能使用
操作
函数
或内置委托,但在这种情况下,您需要定义自己的:

delegate void ActionByRef<T>(ref T value);
委托无效操作ByRef(参考T值);
那么,鉴于此,您可以:

int value = 3;
ActionByRef<int> f2 = DoSomething;
f2(ref value);
int值=3;
ActionByRef f2=剂量测定法;
f2(参考值);