「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>
匿名利用者

案内メニュー