3

遅延ロードされたプロパティゲッターで次のようなものを見ました:

public SomeClass SomeProperty
{
    get
    {
        return _someVar ?? (_someVar = new SomeClass());
    }
}

何が起こっているのかは明らかなように思えますが、これが機能することに気付かずに、何年もの間 C# を使用することができました。

int i = 0;
(i = 1).GetType();

私の主な質問は、これについての詳細情報を検索したり、他の人に説明したりするために使用できる特別な名前があるかどうかです。それに関連する落とし穴があるかどうか(実行順序など、複数のヌル合体演算子をリンクするときに考えなければならないことと同様)があるかどうか、またはその他の標準的な使用法があるかどうか、私はほとんど興味があると思いますこれは、上記の遅延ロードされたプロパティ ゲッターのようなものです (他の方法に比べて特にきれいだとは思いませんが)。

私はこれを投稿するのがほとんど恥ずかしいです. 前もって感謝します。

4

6 に答える 6

3

これは、代入が C# の式であるという結果にすぎません。C# 仕様から:

単純代入式の結果は、左側のオペランドに代入される値です。結果は左側のオペランドと同じ型を持ち、常に値として分類されます。

于 2012-12-05T21:13:55.953 に答える
2

型を持つ変数代入ではありませんが、左側のオペランドです。

評価されてメソッド呼び出しのようなものを返す式はすべて同じです。

詳細については、次のページを参照してください:http: //en.wikipedia.org/wiki/Expression_ (programming ) http://en.wikipedia.org/wiki/Statement_ (computer_science)#Expressions

于 2012-12-05T21:08:21.030 に答える
1

新しく設定された値として評価される代入演算子を探す必要があります。基本的には

(i = 1).GetType();

i には値 1 が割り当てられ、式全体 (i = 1) は整数 1 として評価されます。

于 2012-12-05T21:07:58.087 に答える
0

これは、2つの結果または副作用を伴う線です。つまり、次の2つのことを行います。1)割り当てを実行します。2)ステートメント全体を別のステートメントの右側(RHS)として使用します。nullこれは、BOOLEANステートメントとして使用できるC++でより頻繁に見られます。

使用しても問題ありませんが、個人的にはもっと表現力豊かな方が好きです。2つの結果、imoがあると、何かを見逃しやすくなります。で行を読み始めたときreturn、変数を割り当てるという副作用はないと思います。ちょうど私の.02。

于 2012-12-05T21:08:47.787 に答える
0

割り当ては他の式と同じであり、式の値は割り当てられるものです。

于 2012-12-05T21:09:06.597 に答える
0

簡単に言えば、代入演算子は、左側の変数の型と等しい型を持つ値を返します。

于 2012-12-05T21:17:33.563 に答える