順調に増えてる増えてる
今日またアップデートがきました。
Visual Studio 2022 17.0.0 Preview 4.1
例によってスタックトレース吐きまくりなのはいいとして(いいのか?)、いい加減これはどうにかして欲しい項目がこれ(MS報告済み)
リストに出力命令を格納するというコード(デリゲートのサンプル)なのですが、まあそのまま書けばこんな感じでしょうか
var nums = new List<string> { "ONE", "TWO", "THREE" }; var actions = new List<Action>(); foreach (var n in nums) { actions.Add(() => { Console.WriteLine(n); }); }
このコードのforeachのところにカーソルを持って行くと、修正候補として
と表示され、〝呼び出し形式へ変換〟を指定した場合こうなります。
var nums = new List<string> { "ONE", "TWO", "THREE" }; var actions = (nums.Select(n => () => { Console.WriteLine(n); })).ToList();
……当然こんなものはコンパイルできません。
これをチェーンメソッドに変換するとしたら
var nums = new List<string> { "ONE", "TWO", "THREE" }; var actions = nums.Select(n => (Action)(() => Console.WriteLine(n))).ToList();
あたりが無難かと思います。
修正を提案してくるくらいならせめてシンタックスエラーが出るようなものに変換するんじゃない~
余談:チェーンメソッドというものは、慣れたら大したことじゃないんですが、まあ読みづらいと言えば読みづらいので、私が書くとすれば↓のようになるんじゃないかなと*1。
var nums = new string[] { "ONE", "TWO", "THREE" }; var actions = from n in nums select (Action)(() => Console.WriteLine(n)); //actions.ForEach(delegate (Action action) { action(); }); actions.ForEach(action => action());
私は、昨日書いたようにLINQ大好きですけど、クエリ式で書けるものはクエリ式で書く方が見易いと思います。
伊達にクエリ式がシンタックスシュガーと呼ばれているわけではないということで。
……クエリ式でどうやっても書けないものはあるので、適材適所の併用が吉かと(^^)
*1:今は最後の行のような書き方ができるから楽ですけど、以前はその1行上のコメントみたいな書き方だったんですよねぇ……