2

オブジェクトへの LINQ は私の親友です。変換を行うために ConvertAll 拡張メソッドを頻繁に使用しています。

ただし、 Select 拡張メソッドを使用して同じことを実現できることに気付きました。

たとえば、Alarm オブジェクトのリストを表示する ListView があります。オブジェクト自体を ListView 要素の Tag プロパティに格納します。次に、この方法で選択を取得します。

ConvertAll を含むバージョン:

public Alarm[] SelectedTags
{
    get
    {
        return AlarmListView
               .SelectedItems
               .OfType<ListViewItem>()
               .ToList().ConvertAll(i => i.Tag as Alarm)
               .ToArray();
    }
}

選択のあるバージョン:

public Alarm[] SelectedTags
{
    get
    {
        return AlarmListView
               .SelectedItems
               .OfType<ListViewItem>()
               .Select(i => i.Tag as Alarm)
               .ToArray();
    }
}

個人的にSelectは、コレクションを に入れなくても簡単に変換できるので、好きListですConvertAll。とにかく、どちらも確かに存在する正当な理由があります。

どちらが優れていますか?どのシナリオで?

4

1 に答える 1

4

ConvertAll.Net 2.0から使用されていますが、LINQの方が新しいです。Selectより一般的で、ConvertAll冗長になるようです。

ConvertAll新しいコードで使用する必要がある状況は考えられません。Selectはよく知られており、より一般的であり、LINQの他の機能(LINQ to SQLでのSQLクエリへの直接変換など)で動作します。

于 2012-09-12T12:48:27.777 に答える