我正在尝试遍历字符串列表并针对单个字符串进行检查。如果找不到匹配的内容,那么我们需要退出代码。
// 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个字符串,则代码可以正常工作,但只要有多个字符串,如果第一个字符串不匹配,代码就会很快退出。
答案 0 :(得分:1)
您可以使用Any
查看序列中的任何元素是否符合您的条件。如果没有,结果将是错误的。
var docTypeAlias = sender.ContentType.Alias;
bool hasMatch = loadedObj.Settings.Any(current => docTypeAlias.Equals(current));
if (hasMatch)
{
// can work
}
else
{
// can't work
}
答案 1 :(得分:1)
添加布尔值以记录答案。
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;
// ...
}
答案 2 :(得分:0)
看起来你想要“继续”(跳过foreach中的其余代码并检查下一项)而不是从函数返回的“return”。
如果您只需要检查集合上的某个谓词,请考虑使用FirstOrDefault。
答案 3 :(得分:0)
bool doAnyMatch = loadedObj
.Settings
.Where(x => x != null)
.Any(x => x.Equals(docTypeAlias));
if(!doAnyMatch) return;
答案 4 :(得分:0)
如果我理解的话,我认为你可以使用它
loadedObj.Settings.Find(delegate(String currentCheckBox)
{
return sender.ContentType.Alias == currentCheckBox
});
如果找到了某些内容,则会返回string
,如果不是null
。