嗨,我剛剛遇到同步問題,並已在這個小例子中複製它。這是ObservableCollection和Linq的正確行爲嗎?
class MyClass
{
public int Number { get; set; }
}
static void Main(string[] args)
{
var list = new ObservableCollection<MyClass>
{
new MyClass() {Number = 1},
new MyClass() {Number = 2},
new MyClass() {Number = 3}
};
var count = from i in list where i.Number == 1 select i;
Console.WriteLine("Found {0}", count.Count());
list[2].Number = 1;
Console.WriteLine("Found {0}", count.Count());
}
這將輸出
Found 1
Found 2
這不是我所期待的,也能猜到它會返回1分兩次。 無論如何要避免這種行爲,仍然使用可觀察的集合?
我試圖實現重新排序的方法,但這使得很難選擇正確的項目。
UPDATE
五言的一個簡單的解決辦法是修改它這樣
int found = count.Count();
Console.WriteLine("Found {0}", found);
list[2].Number = 1;
Console.WriteLine("Found {0}", found);
謝謝,它的工作原理就像我現在要的 – gulbaek 2011-03-30 14:11:52