Closed kanjywm closed 5 years ago
C# 8.0 世代のコンパイラーからコンパイル可能になった、ジェネリック型に対する
static bool M<T>(T x) => x is null;
は T が値型なら常に false になる旨お書きになりました。ほぼその通りですが T が int? 等の Nullable 型の場合だけは、値型でありながら、もちろん true になり得ます。ちゃんと x.HasValue に応じ true を返すよう実装されています。重箱の隅をつついて恐縮ですが。
T
false
int?
true
x.HasValue
https://ufcpp.net/study/csharp/datatype/typeswitch/?p=4#generic-is-null
あー… ありがちな奴… 「非 null 値型」に修正。
C# 8.0 世代のコンパイラーからコンパイル可能になった、ジェネリック型に対する
は
T
が値型なら常にfalse
になる旨お書きになりました。ほぼその通りですがT
がint?
等の Nullable 型の場合だけは、値型でありながら、もちろんtrue
になり得ます。ちゃんとx.HasValue
に応じtrue
を返すよう実装されています。重箱の隅をつついて恐縮ですが。https://ufcpp.net/study/csharp/datatype/typeswitch/?p=4#generic-is-null