回答編集履歴

1

見直しキャンペーン中

2023/07/29 14:39

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -4,25 +4,24 @@
4
4
  その前にこのメソッドは、どのクラスのメソッドでしょうか?
5
5
 
6
6
  そのページの先頭に「Enumerable.ToDictionary メソッド」と書いてあります。
7
- あるいはそのさらに上に
7
+ あるいはそのさらに上に↓のようなリンクもある通り、このメソッドは`Enumerable`クラスのメソッドです。
8
8
  ```
9
9
  Docs / .NET / .NET API ブラウザー / System.Linq / Enumerable / メソッド / ToDictionary
10
10
  ```
11
- のようなリンクもある通り、このメソッドは`Enumerable`クラスのメソッドです。
11
+
12
12
  [Enumerable クラス (System.Linq) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable?view=net-6.0)
13
13
 
14
14
  そのうえ`static`がついています。
15
- ```C#
15
+ ```cs
16
16
  public static Dictionary<TKey, TSource> ToDictionary<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
17
17
  ```
18
18
  つまり本来は↓こう使用するはずなのです。
19
- ```C#
19
+ ```cs
20
20
  Dictionary<long, Package> dictionary = Enumerable.ToDictionary(packages, p => p.TrackingNumber);
21
21
  ```
22
22
 
23
23
  ですが、C#の言語機能(拡張メソッド)で、`packages.ToDictionary(p => p.TrackingNumber);`と書いても同じ意味になるのです(第一引数の頭にある`this`がポイントです)
24
24
  [拡張メソッド - C# プログラミング ガイド | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/extension-methods)
25
-
26
25
  [拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C](https://ufcpp.net/study/csharp/sp3_extension.html)
27
26
 
28
27
  既存の型に後からメソッドを追加できる(ように見える)大変便利な機能で、LINQはほぼすべて拡張メソッドで実装されています。