加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我已经读过迭代HashSet是不好的做法.我应该首先调用.ToLis

发布时间:2020-12-15 18:34:52 所属栏目:百科 来源:网络整理
导读:我有一个名为RegisteredItems的项目集合.我不关心RegisteredItems中项目的顺序,只关注它们是否存在. 我在RegisteredItems上执行两种类型的操作: 按属性查找并退货. 迭代收集并有副作用. 根据:When should I use the HashSetT type? Robert R.说, “It’s s
我有一个名为RegisteredItems的项目集合.我不关心RegisteredItems中项目的顺序,只关注它们是否存在.

我在RegisteredItems上执行两种类型的操作:

>按属性查找并退货.
>迭代收集并有副作用.

根据:When should I use the HashSet<T> type? Robert R.说,

“It’s somewhat dangerous to iterate over a HashSet because doing so
imposes an order on the items in the set. That order is not really a
property of the set. You should not rely on it. If ordering of the
items in a collection is important to you,that collection isn’t a
set.”

在某些情况下,我的收藏将包含50-100个项目.我意识到这不是大量的项目,但我仍然希望获得使用HashSet而不是List的回报.

我发现自己正在查看以下代码并想知道该怎么做:

LayoutManager.Instance.RegisteredItems.ToList().ForEach( item => item.DoStuff() );

vs

foreach( var item in LayoutManager.Instance.RegisteredItems)
{
    item.DoStuff();
}

RegisteredItems用于返回IList< T>,但现在它返回一个HashSet.我觉得,如果我使用HashSet提高效率,将它作为List进行转换是不合适的.然而,Robert的上述引言让我对迭代它感到不安.

在这种情况下,正确的呼叫是什么?谢谢

解决方法

如果您不关心订单,请使用HashSet<>.引用是关于使用HashSet<>当你担心订单时会很危险.如果多次运行此代码,并且项目按不同顺序操作,您会关心吗?如果没有,那你就没事了.如果是,则不要使用HashSet<>.任意转换为List首先并没有真正解决问题.

我不确定,但我怀疑.ToList()会迭代HashSet<>要做到这一点,所以,现在你走了两次集合.

不要过早优化.如果您只有100个项目,只需使用HashSet<>然后继续前进.如果您开始关注订单,请将其更改为List<>然后将其用作任何地方的列表.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读