7

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

这是一个例子

如果一个函数被定义为

 public void DoSomething(int withValue) { } 

可以通过以下方式创建函数中的委托

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

如果将原始函数定义为,该语法如何

 public void DoSomething(ref int withValue) { withValue = 3; } 
4

2 回答 2

12

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

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

public void F()
{
    RefAction<int> f2 = DoSomething;
    int x = 0;
    f2(ref x);
}

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

于 2012-12-17T23:03:50.597 回答
4

您不能使用ActionFunc<T>或内置委托,但在这种情况下需要定义您自己的委托:

delegate void ActionByRef<T>(ref T value);

然后,鉴于此,您可以拥有:

int value = 3;
ActionByRef<int> f2 = DoSomething;
f2(ref value);
于 2012-12-17T23:04:16.170 回答