Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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#中是否存在本机将引用与lambda一起使用的方法?_C#_Reference_Lambda_Expression_Ref - Fatal编程技术网

变态在C#中是否存在本机将引用与lambda一起使用的方法?

变态在C#中是否存在本机将引用与lambda一起使用的方法?,c#,reference,lambda,expression,ref,C#,Reference,Lambda,Expression,Ref,我的函数中有一些变量是通过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 ) (); } T MyFunct

我的函数中有一些变量是通过
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 ) (); 
} 
T MyFunction(参考T x,参考T y)
{ 
返回(Func)(()=>((100*(x-y))/x)();
} 
我想要它:

1) 。要通用

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

3) 。使用两个选项使其与lambdas一起工作

4) 。使用泛型返回结果

5) 。成为一个有机编程的笑话

打电话给smth。就像这样:

int x = 21, y = 9;
int result = MyFunction<int>(ref x, ref y);
intx=21,y=9;
int result=MyFunction(参考x,参考y);
还有其他类型的等等

double x = 21.5, y = 9.3;
double result = MyFunction<double>(ref x, ref y);
double x=21.5,y=9.3;
双结果=MyFunction(参考x,参考y);
遗憾的是,这样的结构和欲望C#不能给我,所以我将研究Lisp/Haskell(可能是F#)


(PS)=>(“所以我想和你所看到的C#可能性进行一次艰难的性爱。”)

我发布了一个简单的不安全方法,但你可以向泛型说再见。使用代码是不好的,但我想它多少回答了这个问题

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

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

我认为你指的是转化而不是变态?变态:任何一种获得性满足的方式,通常被认为是不正常的。。你确定吗“千反”的可对位重复是多形词。它指的是任何非正常的解决方案,可能不仅与性主题有关。参见nafwal的链接:为什么使用var指针?只需返回新函数(()=>*temp+=10)();而且可能也有用@OlegOrlov你不能在lambdas中使用固定的局部变量。真的吗?在VS中尝试一下,我已经运行良好,使用*temp编译,没有使用var指针!静态不安全int MyFunction(ref int value){fixed(int*temp=&value){returnnewfunc(()=>*temp+=10)(;}}VSC#2008express.net3.5-有效)我可以发送证明(带屏幕和视频屏幕)有证明:(这是VSC#2008express,没有错误)点击两个屏幕中的一个
var value = 42;
var returnedValue = MyFunction(ref value);
var success = value == returnedValue;
//success will be true