0

我有一些变量是通过ref函数中的关键字给出的。我想在不完全使用局部变量的情况下在 lambda 表达式中使用 ref 变量。

我知道 C# 不能在工作中合并 lambda 和 ref 变量。但是不存在使 ref 变量在 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)=>(“所以我想和 C# 的可能性完全一样,就像你看到的那样。”)

4

1 回答 1

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

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

于 2013-01-06T20:31:55.640 回答