我正在尝试在我的项目中找到下一个可用的Groupname。我希望组名看起来像“Gruppe 1”,“Gruppe 2”等等。这就是我到目前为止所得到的:
int i = 0;
while ((from GroupViewModel g in _groups
where g.GroupName == ("Gruppe " + (++i).ToString())
select g).Any());
Group group = new Group() { Name = string.Format("Gruppe {0}", i) };
_groups.Add(new GroupViewModel(group));
我认为这对我的问题来说是一个很酷的解决方案,但我开始测试代码
如果_groups
为空,则第一组为“Gruppe 0”
如果_groups
包含1个组(名为“Gruppe 1”),则生成的组名称为“Gruppe 2”。
如果_groups
包含1个组(名为“Gruppe 2”),则生成的组名称为“Gruppe 1”,但如果我添加其他组,则结果名称也为“Gruppe 2”。
我做了很多测试用例,结果总是很奇怪。
initial Groupnames | Resulting names
-empty- | "Gruppe 0", "Gruppe 1", "Gruppe 2", ...
"Gruppe 1" | "Gruppe 2", "Gruppe 3", "Gruppe 4", ...
"Gruppe 2" | "Gruppe 1", "Gruppe 2", "Gruppe 3", ...
"Gruppe 1", "Gruppe 2" | "Gruppe 3", "Gruppe 4", "Gruppe 5", ...
"Gruppe 1", "Gruppe 3" | "Gruppe 5", "Gruppe 6", "Gruppe 7", ...
"Gruppe 1", "Gruppe 4" | "Gruppe 3", "Gruppe 4", "Gruppe 5", ...
"Gruppe 2", "Gruppe 1" | "Gruppe 2", "Gruppe 3", "Gruppe 4", ...
那么,有什么线索吗?
答案 0 :(得分:6)
嗯,每个条目都会调用i++
,无论它是否匹配。
我建议按组名创建查找,然后只使用循环来提取结果。但是,我真的不清楚你想要的是什么。您是否只是想找到第一个“可用”组ID并为其添加新的GroupViewModel
?如果是这样,我会做类似的事情:
var lookup = _groups.ToLookup(group => group.GroupName);
for (int i=0; i < int.MaxValue; i++)
{
string candidateName = "Gruppe " + i;
if (!lookup.Contains(candidateName)
{
Group group = new Group { Name = candidateName };
_groups.Add(new GroupViewModel(group));
break;
}
}