0

ref関数のキーワードで指定された変数がいくつかあります。ローカル変数を正確に使用せずに、ラムダ式で ref-variables を使用したい。

C# ではラムダ変数と参照変数をマージできないことはわかっています。しかし、参照変数をラムダ式で機能させるための倒錯は存在しませんか?

疑似コード (C# になりたい) :

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

私はそれがほしい:

1)。一般的であること。

2)。参照によるジェネリック型を引数として受け入れます。

3)。2 つのオプション upper を使用すると、ラムダで動作します。

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 に答える