我正在使用HashSet以避免在集合中包含具有相同值的两个(或多个)项目,在我的工作中,我需要遍历我的哈希集并删除其值,但是不幸的是,我不能这样做,我正在尝试要做的是:

string newValue = "";
HashSet<string> myHashSet;
myHashSet = GetAllValues(); // lets say there is a function which fill the hashset
foreach (string s in myHashSet)
{
       newValue = func(s) // lets say that func on some cases returns s as  it was and
       if(s != newValue)  // for some cases returns another va
       {
             myHashSet.Remove(s);
             myHashSet.Add(newValue);
       }

}


在此先感谢您的帮助

最佳答案

您不能在容器迭代时对其进行修改。解决方案是使用LINQ(Enumerable.Select)将初始集合投影到“修改的”集合中,并根据投影结果创建一个新的HashSet

由于如果存在带有适当签名的func,则可以直接将其粘贴到Enumerable.Select方法中,并且由于HashSet具有接受IEnumerable<T>constructor,因此全部归为一行:

var modifiedHashSet = new HashSet(myHashSet.Select(func));

关于c# - 在迭代HashSet时更改术语的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8377085/

10-12 15:00