2017-07-03 12 views
2

はC#を学ぶためにScalaから来ています。私はC#でこれをどうやって行うのかをかなり理解しています。サポートされていない可能性がありますか?私は、変数の初期化のために、より大きなコード内に小さなコードブロック計算をカプセル化するという、きちんとした考え方に慣れてきました。洞察力は高く評価されました。おそらく、これを模倣するトリックがあります。ありがとうございました!コードブロックからの結果変数の割り当て?

var calc =  //invalid example wont compile 
      { 
       int x = 3; //x will not escape scope 
      //do something, etc. 
       return x; //assigned to calc as init 
      } 
+0

これは 'var calc = 3;' ;-)と同じです。 –

+1

'x = 3'と' return x'の間にもっとコードがあると仮定します –

答えて

3

私はScalaの概念についてはよく分からないですが、私の知る限り、あなたがそれのように行うことができませんc#。代わりに、次のようにFuncと呼ばれる作り付けの戻り値の型のデリゲートを使用することができます。

Func<int> calc =() => { 
    int x = 3; //x will not escape scope 
      //do something, etc. 
       return x; //assigned to calc as init 
}; 

さて、あなたはcalc()によって、デリゲートの上に呼び出すことができます。

+0

ありがとうございましたが、追加するよりもオーバーヘッドを避けることが重要です。このように匿名の内部関数を使用することを検討しました。しかし、例のUpvote .. – LaloInDublin

+0

私は変数を宣言するときにオーバーヘッドを避けることと混同しています。あなたはどのオーバーヘッドを検討していますか? –

+0

こんにちは、閉鎖されたコードブロック内でコンパクトな一連の計算を行うことが多くなりました。しかし、私はC#は本当にこれをサポートしていませんでしたので、私はスレッドのための最も完全な比較の答えとしてこれをチェックしていると受け入れました。もう一度ありがとうございます – LaloInDublin

1

ない、これはあなたが後にしているものですが、あなたはおそらく、ラムダ式を見てする必要があるかどうかわから:

var calc = () => 
     { 
      int x = 3; //x will not escape scope 
     //do something, etc. 
      return x; //assigned to calc as init 
     } 
+0

Upvoted Akash私は明示的な型を選んだのでP *名誉コメント* –

関連する問題