3

代わりに考えている

result = result ?? defaultValue;

あなたが書くことができます

result ?= defaultValue;

私はそれが良い考えだと言っているのではありません。
このオペレーターにはどのような利点がありますか?
このオペレーターにはどのような欠点がありますか?

4

4 に答える 4

7

私が見ている最大の潜在的な利点は、 のような他の複合演算子と同じ利点を提供できること+=です。次のことを考慮してください

Method().Field = Method().Field ?? someValue;

Method()コストが高い、または副作用がある場合、これらはこのステートメントで 2 回発生します。これを防ぐには、これを 2 行に分割する必要があります。

var temp = Method();
temp.Field = temp.Field ?? someValue;

この位置で立ち往生すると、これは少し退屈になる可能性があります。左辺の副作用が 1 回だけ発生する?=という同じ保証があれば、この余分な行は必要ありません。+=

Method().Field += someValue; // Method() happens once
Method().Field ?= someValue; // Method() happens once 

?=私見は、単純に演算子を使用することによって提供される重要な利点です??。価値はありますが、言語に追加する価値はないと思います

于 2013-03-13T23:15:12.670 に答える
0

私はそれが価値があるとは思わない。一般に、ほとんどの場合、次のようなことを行います。

result = someSourceValue ?? defaultValue;

2 番目のフォームは特殊なケースであり、めったに使用されません。

null 合体演算子は、Web サービスなどのソースから値を読み取り、欠落している値をゼロまたはその他のデフォルトに強制する場合に最も役立ちます。ほとんどの場合、データはどこかから来て、別の場所に行きます。

于 2013-03-13T23:11:57.853 に答える
0

おそらくそうではありません。私は C# で null 合体演算子を数回しか使用していませんが、これは決して好きではありません。C# で行う方法は、意地悪な代入ではなく、明示的な null チェックを記述することです。(悪気はありません)

多くの人がこの演算子を持ちたいと思っていると思いますが、言語にまったくメリットがあるとは思いません。

それは私の意見です。

于 2013-03-13T23:12:01.357 に答える