問題タブ [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.

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

c# - 配列要素の存在を「無効化」するための Null 条件演算子

新しい C# 6.0 の null 条件演算子は、より簡潔で複雑でないコードを記述するための便利な手段です。customers顧客の配列があると仮定すると、これを使用して nullの場合、長さの代わりに null を取得できます( MSDNの例):

同様に、次のように顧客の代わりに null を取得できます。

より複雑な式でcustomersは、is null、最初の顧客が null、または最初の顧客のOrdersオブジェクトが nullの場合に null が返されます。

しかし、null 条件演算子が対処していないように見える、存在しない顧客の興味深いケースがあります。上記で、nullの顧客、つまりcustomers配列内のエントリが null の場合がカバーされることを見てきました。しかし、それは存在しない顧客とはまったく異なります。たとえば5、3 要素の配列で顧客を探したりn、0 要素のリストで顧客を探したりします。(同じ議論が辞書検索にも当てはまることに注意してください。)

null 条件演算子は、NullReferenceException の影響を無効にすることのみに重点を置いているように思えます。IndexOutOfRangeException または KeyNotFoundException は単独で公開されており、隅に追い詰められており、自力で対処する必要があります。null条件演算子の精神で、それらのケースも処理できるはずです...それが私の質問につながります。

私はそれを逃しましたか?null 条件は、この式を真にカバーするエレガントな方法を提供しますか...

...ゼロ番目の要素がない場合は?

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

c# - Null 条件演算子、一部のマシンで期待どおりに動作しない

WebApi 2 プロジェクトの DelegatingHandler に次のコードがあります。

私のマシンでは、これは期待どおりに機能し、301 リダイレクトである応答中に (result.content が null になる場合)、responseContent == null; を取得します。ただし、同僚のマシンでは、この行でヌル参照例外を受け取ります。どちらも 4.5.1 ランタイムを使用していますが、わかる限りの違いは次のとおりです。

  • 私は VS2015 Enterprise SP2 (動作する場所) を使用していますが、彼は VS2015 Professional SP2 (動作しない場所) を使用しています。

Ninja Edit -私がインストールした .NET バージョンとサービス パック、および彼がインストールしたもの...

動作していないマシンに 2 つの 4.5.1 セキュリティ更新プログラム ( KB2901126 & KB2931368 ) がインストールされているようですが、インストールしていないのはこれらのいずれかでこの問題が発生しますか? 確認する必要があるコンパイラまたはコンパイラ オプションに違いはありますか? それとも、もっと簡単な説明があるものを調べていますか?

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

roslyn - ロズリン C#6 ?. ジェネリック型で演算子のコンパイルが乱雑に見える

次のクラス定義を考えてみましょう。

結局のところ、いくつかのメモ:

  • MyClass<T>Tタイプに関する制約を課さないため、 Taclassまたは a struct;
  • c2() == c1(t)常に真でなければなりません。
  • http://tryroslyn.azurewebsites.net/サイトを使用して、いくつかのコード スニペットをコンパイルし、Roslyn が出力するものを確認しています。

それでは、Roslyn のコンパイル方法を分析してみましょうMyClass<T>

1.) c1(T)ケース:

予想通り、Roslyn コンパイラによって生成されたコードを検証した後、次のことがわかります。

2.) c2()ケース:

私が期待したのは、c1(T) と同じコードでした。しかし、私が見ているのは次のとおりです。

うわー、なぜこのすべての不要なコードが発行されるのですか? リリース コンパイル モードでは、C1 メソッドのコード サイズが 39 バイトであるのに対し、C2 メソッドのコード サイズは 68 バイトであることがわかります。これは最適化できるものですか?

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

c# - o?.Value の式ツリー

式ツリーを使用してこの文を生成したいと思います。

oどのクラスのインスタンスでもあります。

何か方法はありますか?

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

c# - なぜ Nullable の null 伝播はT を返し、Nullable ではない?

次のコードを検討してください。

Null 伝搬はTではなく を返しますNullable<T>

方法と理由?