問題タブ [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.
c# - 合体を複数回組み合わせる?
C#には、次のようなことができるものはありますか?
そしてそれはnullではない最初のものを選んで左から右に行きますか?
この演算子がこれを行わない場合、最小限のコードで同様の機能を提供するための可能な代替手段はありますか?
c# - 呼び出しチェーン内のヌル合体
オブジェクトの長いリストがあり、それぞれが「Linqwhere」句内でnullを返す可能性がある場合。
インデクサーはnullを返すことができ、「as」演算子はnullを返すことがあります。オブジェクトに接続がない可能性があります(つまり、プロパティがnullです)。どこかでnullが検出された場合、評価対象のアイテムに対してwhere句で「false」を返すようにします。代わりに、null参照例外で中止されます。
これは、単一のC#式内で表現するように考案されているように思われます。複数行のステートメントを作成したり、別の関数を作成したりするのは好きではありません。私が見逃しているnull合体演算子の使用法はありますか?
python - C# null 合体演算子に相当する Python はありますか?
C# には、代入中に簡単な (短い) null チェックを可能にするnull 合体演算子( として記述) があります。??
pythonに相当するものはありますか?
私はできることを知っています:
しかし、さらに短い方法はありますか (ここで繰り返す必要はありませんs
)。
java - C#にnull合体演算子(??)に相当するJavaはありますか?
Javaで次のコードのようなことをすることは可能ですか?
c# - ヌル合体演算子-次のうちどれが好きですか?
リストがnullであることを確認するメソッドがあるとします。もしそうなら、それはそれをインスタンス化します。
通常、これを行います。
私は最近、null合体演算子について学び、それを次のように変更したいと思っています。
よりコンパクトで、「従来の」メソッドと同じ一連の命令にコンパイルされるように見えます。
少し衒学的かもしれませんが、そのような方法に対して予約があり、実際に使用するのではないかと思いました。
c# - C#でこれを行う簡単な方法はありますか?(null合体型の質問)
これを行う簡単な方法はありますか?
これとnull合体(??)の違いは、null以外の値(?? opの最初のオペランド)が戻る前にアクセスされることです。
c# - C#合体演算子はnullメソッドの戻り値を置き換えませんか?
私はこのコードを持っています:
これは方法です:
そのためFirstOrDefault()
、「ctx」オブジェクトであるエンティティ フレームワーク コンテキストでヒットが見つかりません。したがって、返される「デフォルト」値は ですnull
。これは、クエリのターゲットがクラスであるためです。
を使用したコードの最初のビットの結果は、次の??
ように_localMyClass
なります。私はそれがnew MyClass()
. 代わりに、_localMyClass
null になります。さまざまな括弧のセットでロジックをグループ化しようとしましたが、それでもうまくいきません。
さらに奇妙です。MyClassDAO.GetMyClassByID(123) ?? new MyClass()
デバッグ ブレーク ポイントを設定し、Visual Studio のウォッチ画面に をコピー アンド ペーストすると、結果はnew MyClass()
ではなく になりnull
ます。
なぜこのように機能するのか、誰か説明できますか? メソッドの戻り値を認識せずnull
、代わりにそのnew
部分を使用するのはなぜですか?
c# - 興味深い null 合体演算子のカスタムの暗黙的な変換動作
注: これはRoslynで修正されたようです
この質問は、 null 合体演算子の結合性について説明している this oneに対する私の回答を書いているときに発生しました。
念のために言っておきますが、null 合体演算子の考え方は、次の形式の式であるということです。
最初に を評価しx
、次に:
- の値
x
が null の場合、y
が評価され、それが式の最終結果になります - の値が
x
null 以外で、y
が評価されず、 の値が式の最終結果である場合、必要に応じx
てコンパイル時の型 に変換されます。y
現在、通常、変換の必要はありません。または、null 許容型から null 非許容型への変換だけです。通常、型は同じか、単に from (たとえば) int?
toint
です。ただし、独自の暗黙的な変換演算子を作成することができ、それらは必要に応じて使用されます。
の単純なケースではx ?? y
、奇妙な動作は見られませんでした。ただし、(x ?? y) ?? z
いくつかの紛らわしい動作が見られます。
短いが完全なテスト プログラムを次に示します。結果はコメントに記載されています。
そのため、A から B、A から C、B から C への変換を伴うA
、B
およびの 3 つのカスタム値タイプがあります。C
2 番目のケースも 3 番目のケースも理解できますが、最初のケースに A から B への変換が追加されているのはなぜですか? 特に、最初のケースと 2 番目のケースは同じであると本当に予想していました。結局のところ、式をローカル変数に抽出しているだけなのです。
何が起こっているかについてのテイカーはいますか?C#コンパイラに関しては「バグ」と叫ぶのは非常にためらいますが、何が起こっているのかについては困惑しています...
編集:さて、構成者の答えのおかげで、何が起こっているかのより厄介な例がここにあります。これは、それがバグだと考えるさらなる理由を与えてくれます。編集: サンプルは 2 つの null 合体演算子を必要としません...
これの出力は次のとおりです。
ここで が 2 回呼び出されるという事実は、私にとって非常に驚くべきことです。式が2 回評価さFoo()
れる理由がわかりません。
c# - null 合体の操作順序
このメソッドから奇妙な結果が得られます:
null を StartDepth に渡すと、「Depth - StartDepth」が評価されているため、最初にそれが null であるかどうかを調べてグローバルに置き換えるのではなく、最初に StartDepth をデフォルトの 0 に変換する (ダウングレード?) ように見えるため、合体が失敗します。代わりに StartDepth を使用してください。
これは既知のことですか?括弧を追加することでこれを機能させることができましたが、このように機能するとは本当に思っていませんでした。
c# - Null 合体演算子 - キャストする理由
次のステートメントの最初のステートメントでコンパイル エラーがスローされ、2 番目のステートメントではスローされない理由を教えてください。
などの他のnull許容型を試してみbyte?
ましたが、同じ結果が得られました。最初にオブジェクトにキャストする必要がある理由を教えてください。