[解決済み] is' 対 try cast with null check
2022-09-16 03:51:04
質問
Resharperがこれを回すように提案していることに気づきました。
if (myObj.myProp is MyType)
{
...
}
をこの中に入れてください。
var myObjRef = myObj.myProp as MyType;
if (myObjRef != null)
{
...
}
なぜこのような変更を提案するのでしょうか?私はResharperが最適化の変更やコード削減の変更を提案することには慣れていますが、これは私の単一のステートメントを2行に変えようとしているように感じられるのです。
によると MSDN :
<ブロッククオート某 は 表現 は、次の両方の条件を満たす場合に真と評価されます。 が満たされる場合、真と評価されます。
式
はnullではない。expressionは
型
. つまり
という形のキャスト式です。
(type)(expression)
は例外を投げずに完了します。
は例外を発生させずに完了します。
私の読み違いでしょうか、それとも
is
は、NULLチェックのために明示的に別のローカル変数を作成する必要がなく、ただ1行で全く同じチェックを行うのでしょうか?
どのように解決するのですか?
キャストは1つだけだからです。これを比較してください。
if (myObj.myProp is MyType) // cast #1
{
var myObjRef = (MyType)myObj.myProp; // needs to be cast a second time
// before using it as a MyType
...
}
をこれに変更します。
var myObjRef = myObj.myProp as MyType; // only one cast
if (myObjRef != null)
{
// myObjRef is already MyType and doesn't need to be cast again
...
}
C# 7.0では、よりコンパクトな構文である パターンマッチ :
if (myObj.myProp is MyType myObjRef)
{
...
}
関連
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?
-
[解決済み] C#のインターフェイス。暗黙の実装と明示の実装
-
[解決済み】C#のジェネリック引数のNullまたはデフォルト比較
-
[解決済み】ArrayとList<T>の比較。いつどちらを使うか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】"as "とnullable型によるパフォーマンスの驚き