「LINQ - 拡張メソッド一覧」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし
編集の要約なし |
編集の要約なし |
||
295行目: | 295行目: | ||
Console.WriteLine(outer.Zip(outer2, (o1, o2) => o1.Name + "&" + o2.Name).ToResult()); | Console.WriteLine(outer.Zip(outer2, (o1, o2) => o1.Name + "&" + o2.Name).ToResult()); | ||
// → {C#&Python, Java&COBOL} | // → {C#&Python, Java&COBOL} | ||
</source> | |||
<br><br> | |||
== 変換 == | |||
<center> | |||
{| class="wikitable" | |||
|- | |||
! メソッド名 !! 機能 | |||
|- | |||
| OfType || 各要素を指定した型に変換する。<br>キャストできない要素は除外する。 | |||
|- | |||
| Cast || 各要素を指定した型に変換する。<br>キャストできない要素が含まれていた場合、例外をスローする。 | |||
|- | |||
| ToArray || 配列を作成する。 | |||
|- | |||
| ToDictionary || 連想配列(ディクショナリ)を作成する。 | |||
|- | |||
| ToList ||リストを作成する。 | |||
|- | |||
| ToLookup || キーコレクション*1を生成する。 | |||
|- | |||
| AsEnumerable || IEnumerableを返す。*2 | |||
|} | |||
</center> | |||
'''*1 : 1対多のディクショナリ。例えば、~.ToLookup()["hoge"]と実行すると、"hoge"に紐付く要素の集合(IEnumerable)が返る。'''<br> | |||
'''*2 : IEnumerableと同じ名前のメソッドがクラス内に定義されている場合に使う。'''<br> | |||
'''そのままだと、クラス内のメソッドが優先的に選択されて、IEnumerableの拡張メソッドが呼びだせないため。'''<br> | |||
<source lang="c#"> | |||
ArrayList mixed = new ArrayList { "C#", "Java", 3.141592653, "Groovy", "Scala" }; | |||
Console.WriteLine(mixed.OfType<string>().ToResult()); | |||
// → {C#, Java, Groovy, Scala} | |||
Console.WriteLine(mixed.Cast<string>().ToResult()); | |||
// → System.InvalidCastException: | |||
// 型 'System.Double' のオブジェクトを型 'System.String' にキャストできません。 | |||
</source> | |||
<br><br> | |||
== 補足(結果表示用の拡張メソッド) == | |||
<source lang="c#"> | |||
static String ToResult<TSource>(this IEnumerable<TSource> source) | |||
{ | |||
return "{" + string.Join(", ", source) + "}"; | |||
} | |||
static String ToResult<TKey, TSource>(this IEnumerable<IGrouping<TKey, TSource>> source) | |||
{ | |||
return source.Select(group => string.Format("Key={0}, Source={1}", group.Key, group.ToResult())).ToResult(); | |||
} | |||
</source> | </source> | ||
<br><br> | <br><br> |