p.tatapa.org

p.tatapa.org

C#のジェネリクス、T Foo<T> {...}というのがあったときにFoo<int?>はFoo<int>と同じ意味になる。えええええー。

https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references#generics “If the type argument for T is a value type, T? references the same value type, T.”

where T structとすればいけるんだけど、そうすると値型と参照型の両方を受け取れるメソッドが作れなくなる。型変数が1つならオーバーロードさせればよいんだけど、複数あると爆発する。

これは間違いで、T? Foo<T>()と書いた場合に、Foo<int>()はint?ではなくintが返るという意味だった。いずれにしろ困る。Func<T?, R?> Lift<T, R>(Func<T, R> f)が書けない。
replies
0
announces
0
likes
0