Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9364

[C#] Null許容参照型時代のTry-Parseパターン

$
0
0

Question

以下のメソッドは、trueを返す場合はvalueに非nullの値を格納し、falseを返す場合はnullを格納する。

boolTryGetValue(stringkey,outstringvalue){...}

では、このメソッドは、null許容参照型の導入時にどう変化させなければならないか。

boolTryGetValue(stringkey,outstring?value){...}

と書いてしまうと、呼び出し側で面倒なことになる。

if(TryGetValue("hoge",outstring?value){// nullを許容しない引数のメソッドに渡す際、!演算子が必要になるDisallowNullMethod(value!);}

Answer

NotNullWhen属性、あるいは、MaybeNullWhen属性をout引数に付ける。

boolTryGetValue(stringkey,[NotNullWhen(true)]outstring?value){...}
boolTryGetValue(stringkey,[MaybeNullWhen(false)]outstringvalue){...}

下の場合、引数の型がnullを許容しない型になるが、メソッド内ではout引数にnullを代入できる。

こう書いておくと、このメソッドがtrueを返したコンテキストに限り、valueの値をnull非許容としてあつかえる。

// メソッドを呼び出す際は、null許容型な必要があるif(TryGetValue("hoge",outstring?value){// ここではvalueをnull非許容として扱えるDisallowNullMethod(value);}

参考にした情報

https://stackoverflow.com/questions/55526064/trygetvalue-pattern-with-c-sharp-8-nullable-reference-types
https://www.misuzilla.org/Blog/2019/09/25/NullableReferenceTypes


Viewing all articles
Browse latest Browse all 9364

Latest Images

Trending Articles