曲解.在c#中是否存在本机使用lambdas引用的方法

本文关键字:lambdas 引用 方法 本机 是否 存在 曲解 | 更新日期: 2023-09-27 17:50:54

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

我知道c#不能在工作中合并lambdas和ref变量。但不存在任何变态,使ref-变量工作在lambda表达式?

伪代码(拟c#):
T MyFunction<T>(ref T x, ref T y)
{ 
    return (Func<T>) ( () => ( (100 * (x - y)) / x ) (); 
} 

I want it:

1)。是通用的。

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

3)。

4)。使用泛型返回结果

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

打电话给史密斯。像这样:

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#的可能性,正如你所看到的。")

曲解.在c#中是否存在本机使用lambdas引用的方法

我发布了一个简单的不安全的方法,但是你可以对泛型说再见。使用这些代码是不好的实践,但我想它在某种程度上回答了这个问题。

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

我再重复一遍,我不建议你在任何情况下使用它,如果你需要一种专门为这些事情设计的语言,有很多。