3

私はこの非常に奇妙なコンパイラの振る舞いに出くわしました。何らかの条件に基づいてObservableCollectionからアイテムを削除しようとしています。これが私のコードにあるもので、エラーをスローします

public ObservableCollection<StandardContact> StandardContacts { get; set; }
....
StandardContacts.Remove(s => s.IsMarked); //Compiler Error

エラーは次のとおりです

Error Cannot convert lambda expression to type 'RelayAnalysis_Domain.Entity.StandardContact' because it is not a delegate type  

驚いたことに、同じメソッドの以下のコードは機能します

var deleteCount = StandardContacts.Where(s => s.IsMarked).Count(); //This Works

私はすでに私のクラスに次のインポートを持っています

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Entity;

この質問はばかげていることが判明するかもしれませんが、それは私の頭を傷つけました。

注:Intellisenceでも同じエラーが表示されます

4

2 に答える 2

3

Observableコレクションのremoveメソッドは、タイプT(この場合はStandardContract)の入力を受け取りますFunc<T, bool>。この機能が役立つ場合は、ICollectionの独自の拡張メソッドを作成することを検討してください。

public static void RemoveWhere<T>(this ICollection<T> collection, Func<T, bool> predicate)     {
var i = collection.Count;
while(--i > 0) {
    var element = collection.ElementAt(i);
    if (predicate(element)) {
        collection.Remove(element);
    }
}

これは次のように使用できます:

StandardContacts.RemoveWhere(s => s.IsMarked)
于 2012-11-18T02:41:21.330 に答える
2

エラーメッセージにはっきりと記載されていないので、それはできません。
ObservableCollection<T>条件に一致するアイテムを削除するメソッドはありません。(とは異なりList<T>RemoveAll()

代わりに、コレクションを逆方向にループして、を呼び出すことができますRemove()

于 2012-11-18T02:38:30.493 に答える