我正在使用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/