てみてはいかがで??= オペレーターのC#?[定休日]
-
23-09-2019 - |
質問
だとは思いますがC#支援のようなもの??= オペレーター?
の代わりにこの:
if (list == null)
list = new List<int>();
することは可能ではな書き:
list ??= new List<int>();
現在、使ってみました(がっていないが読む):
list = list ?? new List<int>();
解決
私はいつもこのような何かを思っています。私は、それ自体で??
よりもはるかに頻繁にそれを使用することになります。
は、私が本当に欲しい、しかし、あなたは唯一の非nullの場合、オブジェクトを間接参照することができますオペレータの形です。これを交換するには:
int count = (list != null)? list.Count : 0
このような何かを持つ:
int count = list??.Count : 0
参照の長い鎖(悪いデザイン、私が知っている)と私のために特に有用であろう。が、例えば
int count = foo??.bar??.baz??.list??.Count : 0
あなただけの言う「fooへの割り当て、または代替場合はnull」のプロパティのFOOの、または代替の場合はnullにではなく、「割り当てることができるので、これは、現在??
では不可能です。 「
他のヒント
個人的に私が思う唯一の第2膨張が理にかなっている(+=
などと同じラインに沿って維持するという点で):
list = list ?? new List<int>();
が、私はそれを見つける正直に言うと少しは不要ビット。人々は通常i += 5;
「を取得」が、ヌル・合体(??
)に問題を持っている傾向があります。まあ、私はそれがうまくエンディング見ていない... nullで合体 - 代入演算子を追加します。
個人的に私は、元のコードを好みます
if(list == null) { list = new List<int>(); }
....
も - 考慮してください。他のすべての+=
で、-=
など - 右側は常に評価されます。この場合は、(場合によっては)ではないでしょう。それはさらに混乱を追加します。これによって私は意味します:
i += SomethingCriticalThatMustBeCalled(); // fine - always runs
j ??= SomethingElseCriticalThatMustBeCalled(); // is this run? if j != null?
私はstackoverflowの上のどこかにここで見つけるトリックは、このような何かをすることだった...
private List<string> myList;
public List<string> MyProp
{
get { return myList ?? (myList= new List<string>()); }
}
...あなた多分あなたのコード内で同様の怠惰にevalを使用することができます。
私のようなタッフの対応もよかったで簡潔に表現怠け者のみに発現する。かどうかを返し追加の言語は別のもの全て エリック-Lippert愛点, 新しい機能を必要と大量の作業を実施しなければな貢献を大幅に純正の言語に対応するための付属。
なんか間違っているのは、このオペレーターに存在しているクライアントまで、フルのC#: http://msdn.microsoft.com/en-us/library/ms173224(VS.80).aspx