問題タブ [switch-expression]
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# - switch 式でオブジェクト パターンと一致した後に null 参照の可能性がある逆参照 (CS8602)
custom の定義に次のコードがありますIEqualityComparer<Uri?>
。
最後のアームの呼び出しで CS8602 警告が表示されEquals
、可能性x
がnull
あることがわかりました。しかし、 wedの場合に一致しないx
オブジェクトパターンと照合しました。そのブランチにある原因となる可能性のある制御フローを見逃していますか、それとも不可能であり、それを強打する必要がありますか? アナライザーのバグですか、それとも既知の制限ですか?{}
x
null
x
null
アップデート
これは、タプルを分解した場合にのみ発生することに注意してください。このコードは正しく、警告はありません。
c# - 誰かが C# スイッチ式でこの型推論の「グリッチ」を説明できますか?
C# のスイッチ式をいじっていたところ、非常に奇妙なことに遭遇しました。
コードは次のとおりです。
IDE (Visual Studio) は、IDE0004 C# キャストが冗長であると警告します。だから私はそれを信頼し、キャストを削除することにしました. 両方の (Func<int, string>) キャストに適用されます。
そこで、そのうちの 1 つを削除することにしました。
しかし今、IDE は「switch」キーワードに赤で下線を引いています。「エラー」のメッセージは「スイッチ式に最適な型が見つかりませんでした」です。この時点で、冗長性に関する IDE からの提案は無効であり、それに従うとエラーが挿入されると思います。しかし... プログラムを実行すると、キーワードに赤の下線が引かれ、エラーが発生しても、エラーなしでコンパイルされ、正常に実行されます ("hello" が出力され、ReadLine でブロックされます)。
問題は、これは (IDE またはコンパイラの) バグですか? その場合、どこに報告できますか? そうでない場合...誰かがなぜこれが起こっているのか詳しく説明してくれませんか?
おまけ: また、"x" が代わりに DateTimeOffset であるとしましょう。
現在、「スイッチ」は同じエラーでまだ赤ですが、さらに「DayOfWeek」は赤で、マウスオーバーすると「シンボル 'DayOfWeek' を解決できません」と表示されますが、型の定義はそこにあり、すべてがコンパイルされ、期待どおりに動作します「こんにちは土曜日」を出力します。
そこから、2 番目のキャスト (Func<DateTimeOffset, string>) を削除すると、エラー CS0149: Method name expected が原因でコンパイルされません (どういうわけか式を適切に解析できないと思います)。