問題タブ [null-coalescing-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
77 参照

c# - 合体を複数回組み合わせる?

C#には、次のようなことができるものはありますか?

そしてそれはnullではない最初のものを選んで左から右に行きますか?

この演算子がこれを行わない場合、最小限のコードで同様の機能を提供するための可能な代替手段はありますか?

0 投票する
4 に答える
1311 参照

c# - 呼び出しチェーン内のヌル合体

オブジェクトの長いリストがあり、それぞれが「Linqwhere」句内でnullを返す可能性がある場合。

インデクサーはnullを返すことができ、「as」演算子はnullを返すことがあります。オブジェクトに接続がない可能性があります(つまり、プロパティがnullです)。どこかでnullが検出された場合、評価対象のアイテムに対してwhere句で「false」を返すようにします。代わりに、null参照例外で中止されます。

これは、単一のC#式内で表現するように考案されているように思われます。複数行のステートメントを作成したり、別の関数を作成したりするのは好きではありません。私が見逃しているnull合体演算子の使用法はありますか?

0 投票する
11 に答える
153251 参照

python - C# null 合体演算子に相当する Python はありますか?

C# には、代入中に簡単な (短い) null チェックを可能にするnull 合体演算子( として記述) があります。??

pythonに相当するものはありますか?

私はできることを知っています:

しかし、さらに短い方法はありますか (ここで繰り返す必要はありませんs)。

0 投票する
6 に答える
116442 参照

java - C#にnull合体演算子(??)に相当するJavaはありますか?

Javaで次のコードのようなことをすることは可能ですか?

詳細について??

0 投票する
2 に答える
203 参照

c# - ヌル合体演算子-次のうちどれが好きですか?

重複の可能性:
あなたの意見では、より読みやすいものは何ですか:?? (オペレーター)またはifの使用

リストがnullであることを確認するメソッドがあるとします。もしそうなら、それはそれをインスタンス化します。

通常、これを行います。

私は最近、null合体演算子について学び、それを次のように変更したいと思っています。

よりコンパクトで、「従来の」メソッドと同じ一連の命令にコンパイルされるように見えます。

少し衒学的かもしれませんが、そのような方法に対して予約があり、実際に使用するのではないかと思いました。

0 投票する
3 に答える
208 参照

c# - C#でこれを行う簡単な方法はありますか?(null合体型の質問)

これを行う簡単な方法はありますか?

これとnull合体(??)の違いは、null以外の値(?? opの最初のオペランド)が戻る前にアクセスされることです。

0 投票する
3 に答える
824 参照

c# - C#合体演算​​子はnullメソッドの戻り値を置き換えませんか?

私はこのコードを持っています:

これは方法です:

そのためFirstOrDefault()、「ctx」オブジェクトであるエンティティ フレームワーク コンテキストでヒットが見つかりません。したがって、返される「デフォルト」値は ですnull。これは、クエリのターゲットがクラスであるためです。

を使用したコードの最初のビットの結果は、次の??ように_localMyClassなります。私はそれがnew MyClass(). 代わりに、_localMyClassnull になります。さまざまな括弧のセットでロジックをグループ化しようとしましたが、それでもうまくいきません。

さらに奇妙です。MyClassDAO.GetMyClassByID(123) ?? new MyClass()デバッグ ブレーク ポイントを設定し、Visual Studio のウォッチ画面に をコピー アンド ペーストすると、結果はnew MyClass()ではなく になりnullます。

なぜこのように機能するのか、誰か説明できますか? メソッドの戻り値を認識せずnull、代わりにそのnew部分を使用するのはなぜですか?

0 投票する
5 に答える
25964 参照

c# - 興味深い null 合体演算子のカスタムの暗黙的な変換動作

注: これはRoslynで修正されたようです

この質問は、 null 合体演算子の結合性について説明している this oneに対する私の回答を書いているときに発生しました。

念のために言っておきますが、null 合体演算子の考え方は、次の形式の式であるということです。

最初に を評価しx、次に:

  • の値xが null の場合、yが評価され、それが式の最終結果になります
  • の値がxnull 以外で、yが評価され、 の値が式の最終結果である場合、必要に応じxてコンパイル時の型 に変換されます。y

現在、通常、変換の必要はありません。または、null 許容型から null 非許容型への変換だけです。通常、型は同じか、単に from (たとえば) int?tointです。ただし、独自の暗黙的な変換演算子を作成することができ、それらは必要に応じて使用されます。

の単純なケースではx ?? y、奇妙な動作は見られませんでした。ただし、(x ?? y) ?? zいくつかの紛らわしい動作が見られます。

短いが完全なテスト プログラムを次に示します。結果はコメントに記載されています。

そのため、A から B、A から C、B から C への変換を伴うABおよびの 3 つのカスタム値タイプがあります。C

2 番目のケースも 3 番目のケースも理解できますが、最初のケースに A から B への変換が追加されているのはなぜですか? 特に、最初のケースと 2 番目のケースは同じであると本当に予想していました。結局のところ、式をローカル変数に抽出しているだけなのです。

何が起こっているかについてのテイカーはいますか?C#コンパイラに関しては「バグ」と叫ぶのは非常にためらいますが、何が起こっているのかについては困惑しています...

編集:さて、構成者の答えのおかげで、何が起こっているかのより厄介な例がここにあります。これは、それがバグだと考えるさらなる理由を与えてくれます。編集: サンプルは 2 つの null 合体演算子を必要としません...

これの出力は次のとおりです。

ここで が 2 回呼び出されるという事実は、私にとって非常に驚くべきことです。式が2 回評価さFoo()れる理由がわかりません。

0 投票する
5 に答える
1839 参照

c# - null 合体の操作順序

このメソッドから奇妙な結果が得られます:

null を StartDepth に渡すと、「Depth - StartDepth」が評価されているため、最初にそれが null であるかどうかを調べてグローバルに置き換えるのではなく、最初に StartDepth をデフォルトの 0 に変換する (ダウングレード?) ように見えるため、合体が失敗します。代わりに StartDepth を使用してください。

これは既知のことですか?括弧を追加することでこれを機能させることができましたが、このように機能するとは本当に思っていませんでした。

0 投票する
5 に答える
428 参照

c# - Null 合体演算子 - キャストする理由

次のステートメントの最初のステートメントでコンパイル エラーがスローされ、2 番目のステートメントではスローされない理由を教えてください。

などの他のnull許容型を試してみbyte?ましたが、同じ結果が得られました。最初にオブジェクトにキャストする必要がある理由を教えてください。