問題タブ [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.
c# - 「?」の読み方 Entity Framework ソース コードの記号?
Entity Framework のソース コードを勉強していて?.
、このプロジェクトで多くのシンボルを見つけました。の機能が理解できません?.
。
たとえば、次のように?.
シンボルを見つけることができます。DbContext.cs
c# - 条件付き null 演算子を使用して null 文字列をチェックするにはどうすればよいですか?
次のように、LINQ to objects クエリを実行しようとしています。
これは、CompanyName が null でない限り正常に機能します。
だから、これは新しい null 条件演算子に最適な場所だと思いました! 次のように変更します。
そしてすべてがうまくいくはずです!
代わりに、次のエラーが表示されます。
ここでやりたいことを達成する方法がよくわかりません。このシナリオで null 条件を使用するにはどうすればよいですか?
c# - 正しいメソッド オーバーロードを使用するために、null 条件式の前後に () を配置する必要があるのはなぜですか?
これらの拡張メソッドと列挙型があります。
以下の最初のものif
はコンパイルされます。2番目はしません:
それらは、余分な括弧のセットによってのみ異なります。なぜ私はこれをしなければならないのですか?
bool?
最初は、 to からへの二重の暗黙的なキャストを行っているのではないかと疑っていましたが、最初の拡張メソッドを削除すると、 bool
toからbool?
の暗黙的なキャストがないと不平を言います。その後、IL を確認しましたが、キャストはありませんでした。逆コンパイルして C# に戻すと、次のようになります。bool
bool?
これは、私が実行している CLR のバージョンと、私が期待するものには問題ありません。私が予想してx.Y?.Color.IsOneOf(Color.Red, Color.Green)
いなかったのは、それがコンパイルされないことです。
何が起こっている?それが必要とするのは、単に言語が実装された方法()
ですか?
アップデート
これは、コンテキスト内のエラーを示すスクリーン キャップです。これは私をさらに混乱させています。エラーは実際には理にかなっています。しかし、(今の私の考えでは) そうでないのは、18 行目で同じ問題が発生しない理由です。
c# - text が null の場合、 text?.IndexOf(ch) != -1 は True?
観察: テキストがnullの場合、このメソッドはTrueを返します。私はFalseを期待していました。
上記の行を ILSpy を使用して反映 (または IL を検査) すると、次のコードが生成されます。
私の期待に応えるために本当に必要なものは次のとおりです。
質問: Null 条件付きコードがOR式を生成した理由について、誰かが適切な説明を持っていますか?
完全なサンプル: https://dotnetfiddle.net/T1iI1c
c# - 「null 条件演算子の短絡」とはどういう意味ですか?
今後の訪問者への注意: この質問は、欠陥のある再現コードに基づいていました。?.
オペレーターは確かに短絡します。このブラウザ タブを閉じることができます。
Web には、null 条件演算子 ( ?.
) が回路をショートさせると主張するソースが多数あります (例: http://www.informit.com/articles/article.aspx?p=2421572、「回路」を検索してください)。私はそのようなものを検出できません:
ここで、最初の行は 2 番目のために?.
機能します。2 番目?.
は最初のオペランドとして null を認識したため、同様に null を返しました。これは短絡ではありません。
どうやら、null ケースがトリガーされた場合でも、チェーンの残りの部分が実行されます。チェーンは中止されません。私にとって、短絡とはチェーンが中止されたことを意味します。MSDN はこれが事実であると主張していますが、コード例は短絡を示していません。
この動作は、C# 6 の開発サイクル中に変更されましたか? それは、ウェブ上の悪い情報源を説明するでしょう. そして、ショートサーキットが存在しないのに、なぜショートサーキットについて多くの話があるのでしょうか? 私はここで何かを誤解しているかもしれません。
これは、オペレーターが短絡するかどうかに関するものであるため、重複していません(回答:いいえ、受け入れられた回答はそうは言っていません)。この候補は、null 可能なブール値に関するものであり、それ以外は無関係です。
c# - ハードコーディングされた文字列に null 条件演算子を適用できるのはなぜですか?
次のbool
ような変数があります。
書くif (myBool == null)
と、次の警告が表示されます。
タイプ「bool」の値がタイプ「bool?」の「null」と等しくなることはないため、式の結果は常に「false」になります。
null 非許容変数が null かどうかをチェックする意味がないため、これは明らかです。Visual Studio はそれを認識し、警告としてマークします。
私がstring
知っているように、これはデフォルトでnull可能です。
string
Visual Studio に気付かれずに、null 条件演算子をハードコーディングされた演算子に適用できるのはなぜですか? 私はこのようなことを考えています:
string
Visual Studio は、これがまったく null ではないことに気付くべきではありませんか?
c# - C#6 null 条件演算子 - コード トグルとして?
メンバー アクセスを実行する前に、null 条件演算子を使用して null をテストできることは既に知ってい ます。
例えば :
customers
が null の 場合、null を返しcustomers?.Length
、それが変数になりますcustomers?.Length
null
int? length = ...
また、マルチスレッド環境でのメソッド呼び出しの単一のアトミック操作に使用できることも知っています。
しかし
AFAIU - もしそうFoo
ならnull
また〜だnull
そして、私たちは残っています
そして、私は尋ねます:
質問
null条件演算子は、nullをテストするためだけのものではないようです。ある場合は、さらに深く移動します: x?.y?.c?.d
-
しかし、それはコードのトグルのようにも機能します:
このような:
なる
私は正しいですか?その点に関するドキュメントは見つかりませんでした。
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
c# - null 許容 bool を使用せずに bool の値を設定するときに、null 条件演算子を使用できるのはなぜですか?
次のコード行があります。
Exists
左側はUser
クラスのプロパティです。その型は justbool
であり、notbool?
です。Exists
右側のメソッドは、特定のエンティティがリポジトリに存在するかどうかを確認する API メソッドです。返しますTask<bool>
。最初にリポジトリが null かどうかを確認したいので、null 条件演算子を使用します。リポジトリがnullの場合、右側全体がnullを返すだけで、bool
型に割り当てることができないと思いましたが、コンパイラはそれで問題ないようです。どういうわけか、デフォルトでfalse値になりますか?