Skip to content

unbound な nameof (nameof(T<>)) #488

@ufcpp

Description

@ufcpp

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) とは書ける」みたいなのがあって、
そこそこ実装コストがあって今まで放置だったとのこと。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions