rksoftware

Visual Studio とか C# とかが好きです

C# 11 の新機能を確認「 改善された、メソッド グループからデリゲートへの変換 」

C# 11 の新機能を確認しています。目次は次の記事です。
rksoftware.hatenablog.com

今回は 「 改善された、メソッド グループからデリゲートへの変換 」。公式 Learn の記事は C# 11 の新機能の記事しか見つけることができませんでした。

この機能、説明を見ても良くわかりません。ドラフト仕様に記載があるもののそれを読んでも良くわかりません......。

■ 確認

こういうこと、なのでしょうか?

DInt dint1 = Method<int?>;
DInt dint2 = Method;
DString dstring1 = Method<string?>;
DString dstring2 = Method;

Console.WriteLine(object.Equals(dint1, dint2));         // True
Console.WriteLine(object.Equals(dint1, dstring1));      // False
Console.WriteLine(object.Equals(dstring1, dstring2));   // True

T? Method<T>(T? t) => default;

delegate int? DInt(int? i);
delegate string? DString(string? i);

ジェネリックのメソッドからそうでないデリゲート型への暗黙の変換が行われます? その際にキャッシュされて複数回同じ変換をしてもキャッシュが使われる......? と書いてあるような気がします。

■ 勝手にうまくやってくれる

すみません。よくわかりませんでしたが、勝手にパフォーマンスを上げてくれる機能のようです。信じて任せましょう。