根据某些字段更新ObservableCollection数据最方便的是什么?我可以想到很多方法(Linq,迭代......)但我想知道是否有人提供了证明可以提供的东西。
public ObservableCollection<CCData> CCDataList =
new ObservableCollection<CCData>();
public class CCData : INotifyPropertyChanged
{
public string Symbol { get; set; }
public string LastTick { get; set; }
//INotifyPropertyChanged stuff here...
}
CCDataList.Add(new CCData
{
Symbol = "EUR/USD",
Time = "12:21:58"
});
CCDataList.Add(new CCData
{
Symbol = "AUD/JPY",
Time = "12:25:40"
});
示例
让我们假设我想在集合中查找符号条目&#34; EUR / USD&#34;并更新时间条目。
怎么做到这一点?
答案 0 :(得分:2)
正如您所提到的,有很多方法可以做到这一点。但是我仍然更喜欢Linq,并且会做这样的事情。当然,这不是非常防御性的编码,但你明白了。
CCDataList.Where(c => c.Symbol == "EUR/USD").First().Time = DateTime.Now;
您可以创建一个简单的方法来为您更新属性
public void UpdateCurrencyTime(string currencySymbol, DateTime time)
{
var item = CCDataList.Where(c => c.Symbol == currencySymbol).FirstOrDefault();
if(item != null)
item.Time = time;
}
答案 1 :(得分:0)
从性能的角度来看,最好的方法是使用for循环迭代,第一次遇到所需的值时更新它并使用break来终止循环。 foreach和enumerable类扩展函数使用额外的资源,如枚举器。从编码的角度来看,它们是有效的,但从性能的角度来看,简单的循环是最好的。