变态。是否存在以任何方式在C#中本地使用带有lambdas的引用?

时间:2013-01-06 19:42:21

标签: c# reference lambda expression ref

我的函数中有一些通过ref关键字给出的变量。我想在lambda表达式中使用ref-variables而不使用本地变量。

我知道C#不能在工作中合并lambdas和ref-variables。但是不存在任何使变量变量在lambda表达式中起作用的变换吗?

伪代码(想成为C#)

T MyFunction<T>(ref T x, ref T y)
{ 
    return (Func<T>) ( () => ( (100 * (x - y)) / x ) (); 
} 

我想要它:

1)。是通用的。

2)。通过引用接受泛型类型作为参数。

3)。使用两个选项upper使其适用于lambdas。

4)。使用泛型返回结果。

5)。是一个有机编程代码:)笑话。

并致电smth。那样:

int x = 21, y = 9;
int result = MyFunction<int>(ref x, ref y);

还有其他类型......

double x = 21.5, y = 9.3;
double result = MyFunction<double>(ref x, ref y);

可惜,这样的构造和欲望C#无法给我,所以我要看看Lisp / Haskell(也许是F#)。

(PS)=&gt; (“所以我希望与C#的可能性完全一样。”)

1 个答案:

答案 0 :(得分:1)

我发布了一个简单的不安全方法,但你可以告别泛型。使用代码是糟糕的做法,但我猜它在某种程度上回答了这个问题。

static unsafe int MyFunction(ref int value)
{
    fixed (int* temp = &value)
    {
        var pointer = temp;
        return new Func<int>(() => *pointer += 10)();
    }
}

通过以下方式使用:

var value = 42;
var returnedValue = MyFunction(ref value);
var success = value == returnedValue;
//success will be true

我再说一遍,我不建议你在任何情况下都使用它,如果你需要一种专为这些东西设计的语言,那就有很多。