問題タブ [null-propagation-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# - Null 伝播演算子と foreach
Null 伝播演算子?.
についてよく読んで、次のシナリオで役立つかどうかの答えが見つかりませんでした。
スローするコード:
これを機能させるには、変数null
にアクセスする前にチェックを追加する必要があります。values
ほとんどの場合、上記のコードは Null 伝播演算子の設計上の考慮事項の範囲外です。それでも、確かに、私は尋ねなければなりません。
私の質問:
ループ内null
のコレクションにアクセスしようとする場合、Null 伝播演算子は役に立ちますか?foreach
c# - ラムダ式で null 伝播演算子を使用できないのはなぜですか?
特に長いクエリでは、使用されるすべてのクラスをnullチェックする必要がないため、コードでnull伝播演算子をよく使用します。
次のコードは、ラムダで null 伝播演算子を使用できないというコンパイル エラーをスローします。
エラー :
エラー CS8072 式ツリー ラムダに null 伝播演算子を含めることはできません。
C# は、他に何もできない場合、上記のコードを次のコードに簡単に変換できます。
C# が何もせず、単にコンパイラ エラーをスローするのはなぜですか?
linq - Null 伝播 ?.First() と .FirstOrDefault()
null 伝播演算子をしばらく使用した後、単一の項目を選択するための linq 句を作成することに出くわしました。?.First() を使用しない理由 (パフォーマンス、ベスト プラクティス) はありますか?
また
c# - C# 6.0 Null 伝搬演算子とプロパティ代入
この質問は、説明を徹底するために完全に見直されました。
null が伝播されたオブジェクトに対してプロパティセッターを呼び出すことができないという点で、C# 6.0 の null 伝播演算子の非常に貧弱な制限のように見えることに気付きました(ただし、null が伝播されたオブジェクトに対してプロパティゲッターを呼び出すことはできます) 。 . 生成された IL (これは C# に反映されています)からわかるように、null 伝播を使用してプロパティ セッターを呼び出す機能を制限するものは何もありません。
手始めに、Java スタイルの Get/Set メソッドと public getter/setter アクセスを持つプロパティの両方を持つ単純なクラスを作成しました。
次のテスト クラスで null 伝播の機能をテストしました。
割り当ての左側は、変数、プロパティ、またはインデクサーでなければなりません。
ただし、このことから、名前を設定する Java の呼び出しによる方法がSetName(...)
機能することに気付くかもしれません。また、null 伝播プロパティの値を取得することも機能することに気付くかもしれません。
このコードから生成された C# を見てみましょう。
メソッドに対して使用するとSetName
、null 伝播は単純なif
ステートメントに変換され、プロパティ ゲッターに対して使用すると、またはName
の値を取得するために三項演算子が使用されることに注意してください。Name
null
ここで気づいたことの 1 つは、ステートメントを使用する場合と三項演算子を使用する場合の動作の違いですif
。セッターを使用する場合、if
ステートメントを使用すると機能しますが、三項演算子を使用すると機能しません。
この例では、if
ステートメントと三項演算子の両方を使用して、 person がそのプロパティnull
に割り当てようとする前に存在するかどうかを確認しています。ステートメントは期待どおりName
に機能します。if
期待どおり、三項演算子を使用するステートメントは失敗します
オブジェクト参照がオブジェクト インスタンスに設定されていません。
if
私の意見では、この制限は、NULL 伝搬をステートメントまたは三項式に変換する C# 6.0 の機能によるものです。ステートメントのみを使用するように設計されていた場合if
、プロパティの割り当ては null 伝播を介して機能します。
これまでのところ、これが可能であってはならない理由について説得力のある議論を見たことがありません。したがって、私はまだ答えを探しています!
c# - オブジェクトがnullのときに設定されるC#6のnull伝播値
myObject
このシナリオで、 nullの場合、Result の値はどうなるでしょうか?
c# - C# 6 メソッドの Null 条件演算子が失敗する
次の (C# インタラクティブ) はコンパイルされますが、失敗します。何が欠けているのかわからない...
c# - Null条件演算子でNullable演算子を使用するにはどうすればよいですか?
オールドウェイ
新しい方法?