回答編集履歴
1
見直しキャンペーン中
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
|
-
|
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
|
-
```
|
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
|
-
```
|
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はほぼすべて拡張メソッドで実装されています。
|