这是一个奇怪的问题,但由于某种原因,这让我很难过。我有下面的扩展函数,它接收4个字符串参数,其中包含3个值中的一个(“匹配”,“不匹配”,“空”)。在函数中我有一个if语句,其中我需要条件只包含包含值“Match”的参数。
public static void AddIfNotNullAndInAdvancedSearch(
this List<TreeDocument> docs,
TreeDocument value,
string studytitlecontainsshearch,
string outputtitlecontainssearch,
string datasetnamecontainssearch,
string templatenamecontainssearch)
{
if (value.Path != null &&
(studytitlecontainsshearch == "Match" &&
outputtitlecontainssearch == "Match" &&
datasetnamecontainssearch == "Match" &&
templatenamecontainssearch == "Match"))
{
docs.Add(value);
}
}
使用上面的代码,例如,如果studytonlecontainsshearch为“Empty”,那么if语句将解析为false。但是,在这种情况下,我只希望在语句中包含剩余的3个参数,而不是包含“空”或“不匹配”的参数。因此,如果只有两个参数包含“匹配”,我希望只有if语句中的参数。
我可能错过了一个非常明显的解决方案,所以提前道歉。
答案 0 :(得分:3)
那么,如果任何参数为“匹配”,那么您是否想要获得真实?然后,您需要将&&
(意为“和也”)更改为||
(表示“或其他”)
if (value.Path != null &&
(studytitlecontainsshearch == "Match" ||
outputtitlecontainssearch == "Match" ||
datasetnamecontainssearch == "Match" ||
templatenamecontainssearch == "Match"))
{
docs.Add(value);
}
编辑:因为看起来您不想添加文档,如果任何参数是“不匹配”,您可以将其更改为: 另一个编辑:事实上你还需要检查是否有匹配
if (value.Path != null &&
(studytitlecontainsshearch == "Match" ||
outputtitlecontainssearch == "Match" ||
datasetnamecontainssearch == "Match" ||
templatenamecontainssearch == "Match") &&
(studytitlecontainsshearch != "No Match" &&
outputtitlecontainssearch != "No Match" &&
datasetnamecontainssearch != "No Match" &&
templatenamecontainssearch != "No Match"))
{
docs.Add(value);
}
您实际上可以使用'params'来简化方法,而不是指定每个参数。这样您就可以在不更改方法签名的情况下添加更多搜索字词:
public static void AddIfNotNullAndInAdvancedSearch(
this List<TreeDocument> docs,
TreeDocument value,
params string[] searches)
{
if (value.Path != null &&
searches.Any(x => x == "Match") &&
!searches.Any(x => x == "No Match"))
{
docs.Add(value);
}
}
答案 1 :(得分:0)
使这项工作的一种方法是创建一个不同的类:
"This is an example. Start color=BLUE and rest of the string"
然后在public class SearchModel
{
public string SearchType { get; set; }
public string SearchResult { get; set; }
}
方法中将此类用于params,如下所示:
AddIfNotNullAndInAdvancedSearch
答案 2 :(得分:0)
对不起我不知道我是否理解你的疑问,但我会尽力帮助你。
我为这种情况看到了很多解决方案,例如您可以将&&
更改为
你的if语句中的||
来比较你的字符串
但如果你想要一些更具表现力和灵活性的东西,你可以做类似的事情。
public static void AddIfNotNullAndInAdvancedSearch(this List<TreeDocument> docs, TreeDocument value, List<string> filters)
{
if(value.Path != null && filters.Exists(x => x == "Match")) docs.Add(value);
}