csharplang 8480
https://github.com/dotnet/csharplang/blob/main/proposals/unbound-generic-types-in-nameof.md
Console.WriteLine(
// <> とか <,> とかが許されるように。
nameof(IDictionary<,>.Values)
);
今までだと nameof(T<int>) みたいになんでもいいから具象型を型引数に入れとかないとダメだった。
(しかもこれで得られる文字列は T だけ。int の部分は無価値。)
単に「短く書けるようになった」というだけではなくて、
「型引数にどうやっても具象型を渡せない」みたいなことも原理的にはあり得るので一応「できなかったことができる」価値なくはないらしい。
(とはいえ、「型引数にどうやっても具象型を渡せない」を再現するの無茶苦茶難しい。)
(where 句によっては「無駄にダミーの派生型を作ってそれを渡さないとダメ」みたいな苦しい状況は簡単に起こる。)
素人目戦だと「最初から認めろよ」みたいなところあるものの、一応、
「A<>.StaticMember とは書けないけど nameof(A<>.Member) とは書ける」みたいなのがあって、
そこそこ実装コストがあって今まで放置だったとのこと。
csharplang 8480
https://github.com/dotnet/csharplang/blob/main/proposals/unbound-generic-types-in-nameof.md
今までだと
nameof(T<int>)みたいになんでもいいから具象型を型引数に入れとかないとダメだった。(しかもこれで得られる文字列は
Tだけ。intの部分は無価値。)単に「短く書けるようになった」というだけではなくて、
「型引数にどうやっても具象型を渡せない」みたいなことも原理的にはあり得るので一応「できなかったことができる」価値なくはないらしい。
(とはいえ、「型引数にどうやっても具象型を渡せない」を再現するの無茶苦茶難しい。)
(where 句によっては「無駄にダミーの派生型を作ってそれを渡さないとダメ」みたいな苦しい状況は簡単に起こる。)
素人目戦だと「最初から認めろよ」みたいなところあるものの、一応、
「
A<>.StaticMemberとは書けないけどnameof(A<>.Member)とは書ける」みたいなのがあって、そこそこ実装コストがあって今まで放置だったとのこと。