gpt4 book ai didi

c# - 在多个列表之一中更新对象的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:30 25 4
gpt4 key购买 nike

我正在尝试找到更新对象的最佳方法,该对象可能位于少数不同列表/集合中的一个中

例子:

public class MyItem
{
public Guid Id { get; set; }
public string Name { get; private set; }
public string Status { get; private set; }

public MyItem(string name)
{
this.Id = new Guid();
this.Name = name;
}

public void UpdateStatus(string status)
{
this.Status = status;
}
}

public class OtherClass
{
public ObservableCollection<MyItem> ItemList1;
public ObservableCollection<MyItem> ItemList2;
public ObservableCollection<MyItem> ItemList3;

public UpdateStatus(Guid id, string status)
{
// Figure out which ItemList needs to be updated
var item = ItemList1.FirstOrDefault(s => s.Id == id);
if (item == null)
{
item = ItemList2.FirstOrDefault(s => s.Id == id);
if (item == null)
{
item = ItemList3.FirstOrDefault(s => s.Id == id);
if (item == null)
{
Debug.WriteLine("Unable to update Status");
return;
}
}
}
item.UpdateStatus(status);
}
}

我不喜欢嵌套的 if,所以我确信有更好的方法,但现在是星期五,我的大脑被炸了:(

我意识到我可以添加这样的东西来代替嵌套的 ifs:

public MyItem UpdatedStatus(ObservableCollection collection, Guid id)
{
return collection.FirstOrDefault(s => s.Id == id);
}

public bool UpdatedStatus(ObservableCollection collection, Guid id, string status)
{
var item = collection.FirstOrDefault(s => s.Id == id);
if (item != null)
{
item.UpdateStatus(status);
return true;
}
return false;
}

不过好像应该有更好的办法

有什么建议吗?

这些集合中可能有数百个项目,后面的项目中会有更多项目,因此我试图找到处理更新的最有效方法。

最佳答案

LINQ 寻求帮助。它对你有用吗?

var item = ItemList1.Union(ItemList2)
.Union(ItemList3)
.FirstOrDefault(s => s.Id == id);

重要:

Union()返回唯一元素,它在大型数据集上可能会很慢,因此请考虑使用 Concat()代替大列表"

var item = ItemList1.Concat(ItemList2)
.Concat(ItemList3)
.FirstOrDefault(s => s.Id == id);

另外值得一看的是来自 edulinq 系列的 Jon Skeet 的 Concat() 实现,Concat() 非常简单:( Full Article )

private static IEnumerable<TSource> ConcatImpl<TSource>( 
IEnumerable<TSource> first,
IEnumerable<TSource> second)
{
foreach (TSource item in first)
{
yield return item;
}
foreach (TSource item in second)
{
yield return item;
}
}

关于c# - 在多个列表之一中更新对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9842377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com