在if语句中仅使用具有特定值的参数

时间:2018-03-28 08:21:56

标签: c#

这是一个奇怪的问题,但由于某种原因,这让我很难过。我有下面的扩展函数,它接收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语句中的参数。

我可能错过了一个非常明显的解决方案,所以提前道歉。

3 个答案:

答案 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);
}