gpt4 book ai didi

c# - IEnumerable 是否替换了糟糕的设计?

转载 作者:行者123 更新时间:2023-11-30 17:15:49 24 4
gpt4 key购买 nike

我创建了以下扩展方法。这是一个糟糕的设计吗?我应该为 ICollection 执行此操作吗?

public static IEnumerable<TSource> Replace<TSource>(this IEnumerable<TSource> source, IEnumerable<TSource> newItems)
{
return source.Except(newItems).Union(newItems);
}

public static IEnumerable<TSource> Replace<TSource>(this IEnumerable<TSource> source, IEnumerable<TSource> newItems, IEqualityComparer<TSource> comparer)
{
return source.Except(newItems, comparer).Union(newItems, comparer);
}

更新:我认为命名有点不对。我希望此功能执行的操作是Add with Overwrite。更新:向 Union 添加了比较器。

最佳答案

您拥有的简化逻辑操作是

 return newItems.Union(source);
return newItems.Union(source, comparer);

当您采用 source.Except(newItems).Union(newItems) 时,您将采用 source 中的所有不同项目,newItems< 中的任何项目除外,然后在 newItems 中添加所有不同的项目。这就是 Union 所做的!获取 newItems 的所有不同项,并将来自 source 的尚不存在的不同项添加到其中。

您可以使用不同的名称 AddWithOverwriteAddWithReplace 等来调用它,这些名称将是错误的(未添加任何内容任何东西,源和 newItems 都没有以任何方式修改),但是操作本身不需要像您的代码那样复杂。

需要权衡取舍。使用上述方法,所有 newItems 都将出现在 source 之前。反之,您已经失去了更换商品的订单。

关于c# - IEnumerable<T> 是否替换了糟糕的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751176/

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