循环遍历列表并仅在没有匹配项时才“返回”
本文关键字:返回 列表 遍历 循环 | 更新日期: 2023-09-27 18:26:01
我正在尝试遍历字符串列表并对照单个字符串检查它们。如果未找到匹配项,则需要退出代码。
// loadedObj.Settings contains the list of strings, can be any number of strings
foreach (var currentCheckBox in loadedObj.Settings.Where(currentCheckBox => currentCheckBox != null))
{
// docTypeAlias is a single string that needs to be matched
var docTypeAlias = sender.ContentType.Alias;
// This is the current value of currentCheckBox
var requiredTypeAlias = currentCheckBox;
if (!requiredTypeAlias.Equals(docTypeAlias)) return;
}
如果"设置"中只有 1 个字符串,则代码工作正常,但是一旦有多个字符串,如果第一个字符串不匹配,则代码会过早退出。
您可以使用
Any
来查看序列中的任何元素是否与您的条件匹配。如果没有这样做,结果将是错误的。
var docTypeAlias = sender.ContentType.Alias;
bool hasMatch = loadedObj.Settings.Any(current => docTypeAlias.Equals(current));
if (hasMatch)
{
// can work
}
else
{
// can't work
}
添加一个布尔值来记录答案。
bool found = false;
foreach (var currentCheckBox in loadedObj.Settings.Where(currentCheckBox => currentCheckBox != null))
{
// docTypeAlias is a single string that needs to be matched
var docTypeAlias = sender.ContentType.Alias;
// This is the current value of currentCheckBox
var requiredTypeAlias = currentCheckBox;
if (requiredTypeAlias.Equals(docTypeAlias)) {
found = true;
break;
}
}
if (!found) return;
或者,将其设置为单独的函数:
bool ControlIsListed(object sender, MySettingsClass loadedObj)
{
foreach (var currentCheckBox in loadedObj.Settings.Where(currentCheckBox => currentCheckBox != null))
{
// docTypeAlias is a single string that needs to be matched
var docTypeAlias = sender.ContentType.Alias;
// This is the current value of currentCheckBox
var requiredTypeAlias = currentCheckBox;
if (requiredTypeAlias.Equals(docTypeAlias)) return true;
}
return false;
}
并用以下命令调用它:
private void eventhandler(object sender, EventArgs e)
{
if (!ControlIsListed(sender, loadedObj)) return;
// ...
}
看起来你想要"继续"(跳过foreach中的其余代码并检查下一项(而不是从函数返回的"return"。
如果只需要检查集合上的某个谓词,请考虑使用 FirstOrDefault。
bool doAnyMatch = loadedObj
.Settings
.Where(x => x != null)
.Any(x => x.Equals(docTypeAlias));
if(!doAnyMatch) return;
我想你可以改用它,如果我理解得很好
loadedObj.Settings.Find(delegate(String currentCheckBox)
{
return sender.ContentType.Alias == currentCheckBox
});
如果找到某些内容,它将返回string
(如果不是null
(。