[解決済み] C# 6.0のクエスチョンマークとドット演算子「?」の意味は?
2022-03-21 12:55:09
質問
VS2015 プレビューの C# 6.0 では、新しい演算子があります。
?.
このように使用することができます。
public class A {
string PropertyOfA { get; set; }
}
...
var a = new A();
var foo = "bar";
if(a?.PropertyOfA != foo) {
//somecode
}
具体的にはどのようなことをするのですか?
どのように解決するのですか?
それは null 条件 演算子を使用します。基本的には、以下のような意味です。
最初のオペランドを評価し、それがNULLであれば、結果をNULLとして停止します。そうでない場合は、2 番目のオペランドを (最初のオペランドのメンバアクセスとして) 評価します。
あなたの例では、ポイントは、もし
a
は
null
であれば
a?.PropertyOfA
は次のように評価されます。
null
という例外が発生します。
null
参照と
foo
(文字列の
==
のオーバーロード)、両者が等しくないことがわかり、実行は
if
ステートメントを使用します。
つまり、こんな感じです。
string bar = (a == null ? null : a.PropertyOfA);
if (bar != foo)
{
...
}
... ただし
a
は一度だけ評価されます。
これは、式の型も変えることができることに注意してください。例えば、次のように考える。
FileInfo.Length
. これは、プロパティタイプが
long
しかし、これをNULL条件演算子と一緒に使うと、結局は
long?
:
FileInfo fi = ...; // fi could be null
long? length = fi?.Length; // If fi is null, length will be null
関連
-
[解決済み】C#でクエスチョンマークを2つ並べるとどんな意味になるのか?
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] 関数を終了するには?
-
[解決済み】「namespace」なのに「type」のように使われる。