問題タブ [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# - プロパティのプロパティが null かどうかを確認する C# のエレガントな方法
C# で、この例の PropertyC から値を引き出したいとします。ObjectA、PropertyA、および PropertyB はすべて null にすることができます。
ObjectA.PropertyA.PropertyB.PropertyC
最小限のコードで安全に PropertyC を取得するにはどうすればよいですか?
今私はチェックします:
このようなことをもっと行うとよいでしょう (疑似コード)。
null合体演算子でさらに折りたたむ可能性があります。
編集もともと、2番目の例はjsのようなものだと言いましたが、jsでは機能しないことが正しく指摘されていたので、疑似コードに変更しました。
c# - メソッド呼び出し時の null オブジェクトの処理
メソッド (またはメソッド チェーン) を呼び出す際に null オブジェクトを処理するための最良のオプションを探しています。
if 条件でチェックするのが私たちの一般的な方法です:
これは、拡張メソッドを使用してさらに改善できます。
注意してください:私は通常無視します!私のプログラミングの練習から。したがって、私にとっては拡張メソッドが適していると言うのが賢明です。
ただし、メソッドチェーンが絡むと非常に扱いが複雑になります。
がnullでない場合にのみ呼び出され、 null以外のオブジェクトを返す場合にのみCallMe
呼び出されるように、C#で処理できるとどのように考えていますか。customObject
CallMe2
CallMe
もちろんIf条件や三項演算子も使えます。ただし、vNext、C#5.0 で提供できるものがあるかどうかを知りたいです。
c# - 新しい C#/VB – 導入された条件の最初の非対称性?
C# の連中は VB について失礼しますが、以下は両方の言語に関連しているはずです。編集:関連していますが、これまでのところ、C# と VB の評価が異なることに誰も気づいていません。質問を調整しました。
以前は、単純な場合
それを逆の順序に並べ替えたいと思ったので、条件を交換ThenPart()
しElsePart()
て否定しました (一般的に言えば、 を使用してNot(condition)
)。あらゆる条件の再配置が可能でした。
最近、優れたNull 条件演算子が導入されました。そして、非対称性が条件になりました。それらと一緒に使用することはできなくなりますNot(condition)
。それとも私は何かを見落としていますか?(これが質問です。)
ここで並べ替えて、逆の順序にしThenPart()
てみてください 。ElsePart()
トリックは、条件に null 値が表示されることです。もちろん、 を使用して否定することはできませんNot
。したがって、自明な否定を使用If Not(list?.Count = 0)
することも、 を使用することもできませんIf list?.Count <= 0
。
唯一の方法は昔ながらIf list Is Nothing OrElse list.Count = 0
です。 (正確な否定は を使用します<= 0
) (編集: VB にのみ適用されます。VB と C# はここで分岐します。以下を参照してください。)
すべての演算子を否定するのが簡単だった些細な時代はなくなりました (編集: VB のみ)。それとも私は何かを見落としていますか?
追加調査後:
安全に実行できる C# を調べ、!(list?.Count = 0)
この発見の後、C# はこの問題から抜け出しました。ここに非対称性はありません。前と同じように否定できます。しかし、私が見る限りnull
、Visual Basicでの評価は ANSI SQL に似ているため、VB には非対称性が残っています。null 値は式を介して伝播します。list?.Count > 0
したがって、VB では、より自明に否定することはできませんIf list Is Nothing OrElse list.Count = 0
。(だから私は「非対称性」という言葉を使いました。) それとも私は何かを見落としているのでしょうか?
c# - == と .Equals() で null 条件演算子の動作が異なるのはなぜですか?
次のコードがあり、正常に動作します。
文字列比較で大文字と小文字を区別しないようにしたかったので、次のように変更しました。
今、コンパイラは私にエラーを与えています:
演算子 && は、タイプ 'bool' および 'bool?' のオペランドには適用できません。
false のように合体することでエラーを修正できます
しかし、コンパイラが最初の null 条件構文を好まない理由が気になります。
c# - C# 安全なナビゲーション演算子 - 実際に何が起こっているのですか?
私は C#6 で追加された安全なナビゲーション オペレーター機能を興味深くフォローしてきました。しばらく楽しみにしていました。しかし、私は予想とは異なる動作を見つけています。私はそれが実際にどのように機能するかを本当に理解していないことに気づきました。
このクラスを考えると
new 演算子を使用したコードを次に示します。
ここまでは、すべてが期待どおりに機能しています。 ?.
左辺が null でない場合はメンバーにアクセスし、それ以外の場合は null を返します。しかし、ここで事態は私が予想していなかった方向に進みます。
何?
から取得できるのに、割り当てた同じ式から取得できないのはHasValue
なぜですか? どうしてnullになることができますか?i
i
HasValue
編集:私の本当の質問は、コンパイルエラーではなく、プログラムの動作に関するものです。コンパイルに関する余分なものを削除し、同じロジックのように見えるものから 2 つの異なる結果が返される理由にこの質問を絞り込みました。
c# - .NET 3.5 / 4.0、VS 2012 / 2013 の Null 条件演算子アナログ?
私のコードでは、いくつかのプロパティ ゲッターを呼び出して値にアクセスする必要があります。
すべてのプロパティは null にすることができます。したがって、すべての値にアクセスするには、ネストされた if ブロックを使用する必要があります。
このコードを改善して、if ブロックの量を減らすにはどうすればよいですか? ラムダ式、LINQ、IExpression などを使用して、何らかの方法で次のものに置き換えることはできますか。
IFoo2 b = GetVal(objB.Prop2.Prop3.Value);
すべての PropX はさまざまなタイプであり、私はそのようなプロパティを何百も持っています。.NET 3.5 または少なくとも .NET 4.0 を使用する必要があります。それ以降のバージョンは使用できません。
重要な編集:
Visual Studio 2012 および 2013 も使用する必要があります。VS 2015 をターゲットにすることはできません。
vb.net - データベース レコードで Null-Conditional が機能しない
.NET 4.6 (VB.Net を使用) で新しいNull-Conditional 演算子をテストしようとしていますが、データベース レコードのフィールドから null 値を取得するときに機能せず、その理由がわかりません。 . これが私のコードです:
それでも、System.Data.StrongTypingException がスローされます。
私は何を間違っていますか?
c# - Dispose メソッドのクラス レベル変数のクリーンアップ
変数userManager
と変数signInManager
はどちらも、インスタンス化できるクラス レベルのインスタンス メンバーであるか、null になる可能性があります。
これを置き換えても安全ですか:
これとともに:
個人的には、変数を破棄した後に変数を明示的に null に割り当てる意味がわかりません。変数は静的ではないため、私が知る限り、何もしません。
c# - null 条件演算子 (?.) を使用した IEnumerable の複数列挙の可能性
これは resharper の誤検知だと思いますが、他の方のご意見を頂きたいです。多分私は何かが欠けています。
この動作は、Resharper 9.2 と 10 の両方で見つかりました。
このクラスを検討してください:
そして、この方法:
theList.Count
とforeach
ワーニングをトリガーしますが、私がしたのでToList()
、これは不可能ですよね?
thisFooCanBeNull?.SomeList?.ToList()
で変更しても警告は発生しませんthisFooCanBeNull.SomeList?.ToList()
が、「この foo は null になる可能性がある」ため、変更したくありません。
このコードに問題がある人はいますか?