用于多个参数精确匹配的 C# 字符串方法 [重复]
Posted
技术标签:
【中文标题】用于多个参数精确匹配的 C# 字符串方法 [重复]【英文标题】:C# string method for exact match on multiple params [duplicate] 【发布时间】: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 的任何输入?是时候关闭这个了。
【参考方案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 => input.Contains(v))
的东西,但似乎希望只有在有单词边界的情况下才匹配“猫” “我有一只猫”,但不是因为“我吃鲶鱼”之类的。
看起来 OP 在字符串对象上寻找方法,而不是在集合上。
现在基于编辑这是正确的,但当然你可以刚刚完成mammals.Contains(input)
。
是的,如果我们不需要任何花哨的字符串比较,Contains
也可以工作(例如v => 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 -- 嗯,这就是这个网站的运作方式。如果你不在场澄清你的问题,它会很快被否决并关闭,然后被遗忘。我不建议发布然后走开。仅在您准备好坐在那里回复时才发布。以上是关于用于多个参数精确匹配的 C# 字符串方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式从字符串中精确匹配 11 位电话号码并从 C# 中的匹配中删除连字符(-)
[ jquery 过滤器 slice(start, [end]) ] 此方法用于在选择器的基础之上精确筛选出匹配的子集(可以使用前导限制范围)