問題タブ [null-conditional-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 投票する
2 に答える
67 参照

c# - 「?」の読み方 Entity Framework ソース コードの記号?

Entity Framework のソース コードを勉強していて?.、このプロジェクトで多くのシンボルを見つけました。の機能が理解できません?.

たとえば、次のように?.シンボルを見つけることができます。DbContext.cs

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

c# - 条件付き null 演算子を使用して null 文字列をチェックするにはどうすればよいですか?

次のように、LINQ to objects クエリを実行しようとしています。

これは、CompanyName が null でない限り正常に機能します。

だから、これは新しい null 条件演算子に最適な場所だと思いました! 次のように変更します。

そしてすべてがうまくいくはずです!

代わりに、次のエラーが表示されます。

ここでやりたいことを達成する方法がよくわかりません。このシナリオで null 条件を使用するにはどうすればよいですか?

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

c# - 正しいメソッド オーバーロードを使用するために、null 条件式の前後に () を配置する必要があるのはなぜですか?

これらの拡張メソッドと列挙型があります。

以下の最初のものifはコンパイルされます。2番目はしません:

それらは、余分な括弧のセットによってのみ異なります。なぜ私はこれをしなければならないのですか?

bool?最初は、 to からへの二重の暗黙的なキャストを行っているのではないかと疑っていましたが、最初の拡張メソッドを削除すると、 booltoからbool?の暗黙的なキャストがないと不平を言います。その後、IL を確認しましたが、キャストはありませんでした。逆コンパイルして C# に戻すと、次のようになります。boolbool?

これは、私が実行している CLR のバージョンと、私が期待するものには問題ありません。私が予想してx.Y?.Color.IsOneOf(Color.Red, Color.Green)いなかったのは、それがコンパイルされないことです。

何が起こっている?それが必要とするのは、単に言語が実装された方法()ですか?

アップデート

これは、コンテキスト内のエラーを示すスクリーン キャップです。これは私をさらに混乱させています。エラーは実際には理にかなっています。しかし、(今の私の考えでは) そうでないのは、18 行目で同じ問題が発生しない理由です。

ここに画像の説明を入力

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

c# - text が null の場合、 text?.IndexOf(ch) != -1 は True?

観察: テキストがnullの場合、このメソッドはTrueを返します。私はFalseを期待していました。

上記の行を ILSpy を使用して反映 (または IL を検査) すると、次のコードが生成されます。

私の期待に応えるために本当に必要なものは次のとおりです。

質問: Null 条件付きコードがOR式を生成した理由について、誰かが適切な説明を持っていますか?

完全なサンプル: https://dotnetfiddle.net/T1iI1c

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

c# - 「null 条件演算子の短絡」とはどういう意味ですか?

今後の訪問者への注意: この質問は、欠陥のある再現コードに基づいていました。?.オペレーターは確かに短絡します。このブラウザ タブを閉じることができます。


Web には、null 条件演算子 ( ?.) が回路をショートさせると主張するソースが多数あります (例: http://www.informit.com/articles/article.aspx?p=2421572、「回路」を検索してください)。私はそのようなものを検出できません:

ここで、最初の行は 2 番目のために?.機能します。2 番目?.は最初のオペランドとして null を認識したため、同様に null を返しました。これは短絡ではありません。

どうやら、null ケースがトリガーされた場合でも、チェーンの残りの部分が実行されます。チェーンは中止されません。私にとって、短絡とはチェーンが中止されたことを意味します。MSDN はこれが事実であると主張していますが、コード例は短絡を示していません。

この動作は、C# 6 の開発サイクル中に変更されましたか? それは、ウェブ上の悪い情報源を説明するでしょう. そして、ショートサーキットが存在しないのに、なぜショートサーキットについて多くの話があるのでしょうか? 私はここで何かを誤解しているかもしれません。

これは、オペレーターが短絡するかどうかに関するものであるため、重複していません(回答:いいえ、受け入れられた回答はそうは言っていません)。この候補は、null 可能なブール値に関するものであり、それ以外は無関係です。

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

c# - ハードコーディングされた文字列に null 条件演算子を適用できるのはなぜですか?

次のboolような変数があります。

書くif (myBool == null)と、次の警告が表示されます。

タイプ「bool」の値がタイプ「bool?」の「null」と等しくなることはないため、式の結果は常に「false」になります。

null 非許容変数が null かどうかをチェックする意味がないため、これは明らかです。Visual Studio はそれを認識し、警告としてマークします。

私がstring知っているように、これはデフォルトでnull可能です。

stringVisual Studio に気付かれずに、null 条件演算子をハードコーディングされた演算子に適用できるのはなぜですか? 私はこのようなことを考えています:

stringVisual Studio は、これがまったく null ではないことに気付くべきではありませんか?

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

c# - C#6 null 条件演算子 - コード トグルとして?

メンバー アクセスを実行する前に、null 条件演算子を使用して null をテストできることは既に知ってい ます。

例えば ​​:

customersが null の 場合、null を返しcustomers?.Length 、それが変数になりますcustomers?.Lengthnullint? length = ...

また、マルチスレッド環境でのメソッド呼び出しの単一のアトミック操作に使用できることも知っています。

しかし

AFAIU - もしそうFooならnull

また〜だnull

そして、私たちは残っています

そして、私は尋ねます:

質問

null条件演算子は、nullをテストするためだけのものではないようです。ある場合は、さらに深く移動します: x?.y?.c?.d -

しかし、それはコードのトグルのようにも機能します:

このような:

なる

私は正しいですか?その点に関するドキュメントは見つかりませんでした。

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

c# - Null 許容 DateTimeOffset を持つ Null 条件演算子

環境: Visual Studio 2015

TimeZone: : UTC + 7:00、バンコク

問題: DateTimeOffset の null 許容変数 (DateTimeOffset?) で、Null 条件付き演算子を使用すると例外が発生します。つまり、値が NULL の場合でもメソッドが呼び出されます。例外が発生します。

クエリ: Null 条件演算子を使用しないか、演算子の代わりに GetValueOrDefault を使用することで解決できますが、すべての UTC + TimeZones で例外が発生する理由を理解したいのですが、UTC - TimeZones でうまく機能します

コード:

ここに画像の説明を入力

編集

コードを修正するには多くの方法があることを理解しています。

ただし、null 条件演算子を使用しない場合のクエリは次のとおりです。

例外にはなりません。以下のブログごとに、null 条件演算子が変数をアンラップするためでしょうか

http://www.ninjacrab.com/2016/09/11/c-how-the-null-conditional-operator-works-with-nullable-types/

null条件演算子を使用すると壊れ、DateTimeKind.Utcを使用せずに「as」演算子を使用すると単純なキャストで機能する理由を理解することにもっと興味があります。

EDIT2

これは DateTimeOffset (.NET フレームワーク コード) のコンストラクターで、ValidateOffset メソッドで中断します。ソース- http://referencesource.microsoft.com/#mscorlib/system/datetimeoffset.cs,68b4bb83ce8d1c31

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

c# - null 許容 bool を使用せずに bool の値を設定するときに、null 条件演算子を使用できるのはなぜですか?

次のコード行があります。

Exists左側はUserクラスのプロパティです。その型は justboolであり、notbool?です。Exists右側のメソッドは、特定のエンティティがリポジトリに存在するかどうかを確認する API メソッドです。返しますTask<bool>。最初にリポジトリが null かどうかを確認したいので、null 条件演算子を使用します。リポジトリがnullの場合、右側全体がnullを返すだけで、bool型に割り当てることができないと思いましたが、コンパイラはそれで問題ないようです。どういうわけか、デフォルトでfalse値になりますか?