【问题标题】:C# string method for exact match on multiple params [duplicate]用于多个参数精确匹配的 C# 字符串方法 [重复]
【发布时间】:2017-02-16 14:44:45
【问题描述】:

是否有标准的String方法可以采用多个参数进行精确比较?

T-SQL 中的等价物是 IN('dog','cat',...)

例如,如果有这样一个名为 EqualToAny() 的方法,那么下面的代码应该返回 false

string s="catfish";
if (s.EqualToAny("dog", "cat", "human", "dolphin"))
   return true;
else
   return false;

【问题讨论】:

  • 所以鲶鱼应该是假的没有什么意义。提供清晰的输入和所需的输出。
  • 你的意思是你想要new [] { "dog", "cat", "human" }.Contains(s)而不是s == "dog" || s == "cat" || s == "human"
  • @HenkHolterman 我读的越多,我就越困惑 我希望下面的代码为哺乳动物返回 true
  • 但 ContainsAny 返回 true 也不是很清楚。
  • 为什么没有来自 OP 的任何输入?是时候关闭这个了。

标签: c#


【解决方案1】:

您可以使用 Linq Any() 方法实现此目的。

string input = "catfish";
var mammals = new [] {"dog", "cat", "human", "dolphin"};
var result = mammals.Any(v => v == input);

对于"catfish"result 将是false,对于"cat",将是true

你也可以把它包装成一个字符串的扩展方法:

public static bool EqualsAny(this string str, IEnumerable<string> validStrings) {
    return validStrings.Any(v => v == str);
}

var result = input.EqualsAny(mammals);

Fiddle

【讨论】:

  • 问题尚不清楚,但实际上可能是 OP 想要更像 mammals.Any(v =&gt; input.Contains(v)) 的东西,但似乎希望只有在有单词边界的情况下才匹配“猫” “我有一只猫”,但不是因为“我吃鲶鱼”之类的。
  • 看起来 OP 在字符串对象上寻找方法,而不是在集合上。
  • 现在基于编辑这是正确的,但当然你可以刚刚完成mammals.Contains(input)
  • 是的,如果我们不需要任何花哨的字符串比较,Contains 也可以工作(例如v =&gt; v.Equals(str, StringComparison.OrdinalIgnoreCase)
【解决方案2】:

你需要 EqualsAny ..

    // string extension method 
    public static bool EqualsAny(this string source, params  string[] prms)
    {
        return prms.Contains(source);
    }

【讨论】:

  • 谢谢,这正是我想要的。我只是希望已经有一种方法可以做到这一点。
  • @userSteve -- 我想指出,您未能参与此论坛,因为所有澄清您的问题的尝试都没有得到您的回答。考虑到您完全忽略了试图帮助您的人数,这非常令人沮丧。
  • @rory.ap 我同意我最初的问题本来可以更好地形成,我很高兴有这么多回复这么快,但这真的只是几分钟的事情!这不是过去的日子!
  • @userSteve -- 嗯,这就是这个网站的运作方式。如果你不在场澄清你的问题,它会很快被否决并关闭,然后被遗忘。我不建议发布然后走开。仅在您准备好坐在那里回复时才发布。
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 2022-11-26
相关资源
最近更新 更多