0

与えられた

        List<LabEntity> selected = originalSettings.SelectedInstanceLabs;
        List<LabEntity> available = Presenter.GetLabs(dateRange);
        if (!firstLoad)
        {
            //Remove selected labs from the available labs
            available.Remove(?);// Remove Where selected.Id = available.Id
        }  

複数のアイテムのタスクを完了することができる拡張メソッドはありますか?削除は一度に1つだけ機能します。他のRemoveタイプのメソッドも、タスクに対応していないようです。そこにForeachを貼り付けることもできますが、もっと簡潔な実装が必要です。

4

4 に答える 4

6

確かにできます!

available.RemoveAll( ~delegate goes here~)

何かのようなもの; available.RemoveAll(a => selected.Exists(s => s.Id == a.Id));

4.0デリゲート構文を許してください。使用しているバージョンがわかりません...

編集:コメントから更新(@vcsjones)

于 2012-06-07T18:41:24.350 に答える
3

こんな感じですか?:

        List<LabEntity> selected = originalSettings.SelectedInstanceLabs;
        List<LabEntity> available = Presenter.GetLabs(dateRange);
        if (!firstLoad)
        {
            //Remove selected labs
            available = available.Except<LabEntity>(selected).ToList();
        }  
于 2012-06-07T18:49:51.983 に答える
0

LINQ に慣れている場合は、最初にそれらをフィルター処理できます。

var selectedSet = HashSet<LabEntry>(selected);
var available = Presenter.GetLabs(dateRange).Where(l => !selectedSet.Contains(l));

または、事後フィルタリングできます。

available.RemoveAll(l => selectedSet.Contains(l));

2 つのうち、最初のほうが高速であるはずです。コレクションから項目を削除するためだけにコレクションを作成する必要がないからです。

于 2012-06-07T18:42:05.420 に答える
0

これらの行に沿った何かがそれを行います:

available.RemoveAll(x => selected.Contains(y => (y.Id == x.Id)));

于 2012-06-07T18:45:31.273 に答える