c# - 尝试更改集合中的元素
问题描述
我正在尝试修改此代码。我需要检查特定元素中的值FilteredCheckObservable
,如果为真,则更改该元素另一部分的值。
基本上像
if (FilteredCheckObservable items.Lang = 'ENG')
{items.check = newcheckname;}
然后这将更新 sourceGroups 集合。
if (string.IsNullOrEmpty(departmentLine.LineID) || string.IsNullOrEmpty(departmentLine.LineName))
continue;
bool discovered = false;
foreach (var group in sourceGroups)
{
if (!group.Key.Line.IsEqual(departmentLine))
continue;
group.Key.IsDiscovered = true;
discovered = true;
group.Key.ScheduleStatusCount = group.CountGroupItem;
break;
}
if (discovered == false)
{
var _ScheduleItemObservable = new ScheduleItemObservable(departmentLine, MainViewViewModel, Shift.ToString());
var item = new Grouping<ScheduleItemObservable, FilteredCheckObservable>(_ScheduleItemObservable);
if (IsShiftValid)
{
item.Key.Shift = Shift.ToString();
item.Key.IsHistoryEnabled = true;
}
sourceGroups.Add(item);
}
for (int index = 0; index < sourceGroups.Count; index++)
{
if (sourceGroups[index].Key.IsDiscovered == true)
{
foreach (var group in sourceGroups)
{
foreach (FilteredCheckObservable items in group)
{
if (items.Lang_ID == LanguageService.Instance.LanguageType.ToString())
{
sourceGroups.Clear();
sourceGroups.Add(item);
}
}
}
}
}
解决方案
欢迎特拉维斯,
我敢打赌罪魁祸首是你的 foreach 循环。 https://stackoverflow.com/a/759985/3403999
不允许在 foreach 循环内修改集合。我不知道您的集合是否有索引器,但如果有,您可以转换为 for 循环:
for (int i = 0; i < sourceGroups.Count; i++)
{
var group = sourceGroups[i];
// The rest of your code.
我可能是错的。您确实说您正在尝试修改一些现有代码。是网上的一些代码吗?也许您可以链接到它以提供完整的上下文。
根据您的新代码段,您需要两个 for 循环:
for (int index = 0; index < sourceGroups.Count; index++)
{
if (sourceGroups[index].Key.IsDiscovered == true)
{
//foreach (var group in sourceGroups)
for (int j = 0; j < sourceGroups.Count; j++)
{
var group = sourceGroups[j];
foreach (FilteredCheckObservable items in group)
{
if (items.Lang_ID == LanguageService.Instance.LanguageType.ToString())
{
sourceGroups.Clear();
sourceGroups.Add(item);
}
}
}
}
}
^ 虽然这可能仍然是一个糟糕的循环。主要是因为你有sourceGroups.Clear();
.
你最好做的是创建一个称为“结果”的内部集合。循环查找您的条件,如果满足,则将该项目添加到结果集合中。
一旦你的循环终止,然后调用 sourceGroups.Clear(),然后调用 sourceGroups.AddRange(results)。如果 sourceGroups 没有 AddRange,则最后一个循环:
foreach (var group in results) { sourceGroups.Add(group); }
推荐阅读
- ajax - 使用 ajax 向 Laravel 控制器发送数据
- javascript - 如何从firebase实时数据库中获取随机密钥的子级数据 - 使用本机反应?
- r - 如何获取数据框中的行索引列表?
- ruby-on-rails - 将数据从 Rails 视图传递到 Rails 6 中的反应组件的首选方法是什么?
- java - 如何在方法中使用通用有界参数
- python - 如何选择性地从 div 标签中抓取 href?
- python - 从静态/img 获取图像到 Django 中的模板
- android - 无法从 Firestore 读取数据
- ios - 如何在 Xcode 中将 iPhone 模拟器连接到 Apple Watch 模拟器?
- spring-boot - 如何删除tomcat嵌入的依赖项?