假设我需要比较字符串x是“A”,“B”还是“C”。
使用Python,我可以使用in运算符轻松检查。
if x in ["A","B","C"]:
do something
使用C#,我可以做到
if (String.Compare(x, "A", StringComparison.OrdinalIgnoreCase) || ...)
do something
它可以与Python更相似吗?
我需要添加System.Linq
才能使用不区分大小写的Contain()。
using System;
using System.Linq;
using System.Collections.Generic;
class Hello {
public static void Main() {
var x = "A";
var strings = new List<string> {"a", "B", "C"};
if (strings.Contains(x, StringComparer.OrdinalIgnoreCase)) {
Console.WriteLine("hello");
}
}
}
或
using System;
using System.Linq;
using System.Collections.Generic;
static class Hello {
public static bool In(this string source, params string[] list)
{
if (null == source) throw new ArgumentNullException("source");
return list.Contains(source, StringComparer.OrdinalIgnoreCase);
}
public static void Main() {
string x = "A";
if (x.In("a", "B", "C")) {
Console.WriteLine("hello");
}
}
}
答案 0 :(得分:27)
在IEnumerable<T>
上使用Enumerable.Contains<T>
这是一种扩展方法:
var strings = new List<string> { "A", "B", "C" };
string x = // some string
bool contains = strings.Contains(x, StringComparer.OrdinalIgnoreCase);
if(contains) {
// do something
}
答案 1 :(得分:22)
if ((new[]{"A","B","C"}).Contains(x, StringComparer.OrdinalIgnoreCase))
答案 2 :(得分:9)
为什么是,在StackOverflow上有一个经典的线程,其中有一个扩展方法可以完全你想要的东西。
public static bool In<T>(this T source, params T[] list)
{
if(null==source) throw new ArgumentNullException("source");
return list.Contains(source);
}
编辑回应以下评论: 如果你只关心字符串,那么:
public static bool In(this string source, params string[] list)
{
if (null == source) throw new ArgumentNullException("source");
return list.Contains(source, StringComparer.OrdinalIgnoreCase);
}
这导致您熟悉的语法:
if(x.In("A","B","C"))
{
// do something....
}
请注意,这与其他人仅使用最接近您提及的语法发布的内容完全相同。
答案 3 :(得分:2)
List<string> possibleMatches = new List<string>{"A", "B", "C"};
possibleMatches.Contains(inputString);
答案 4 :(得分:1)
不确定
var lst = new List<string>() { "A", "B", "C" };
if (lst.Contains(x, StringComparer.OrdinalIgnoreCase) {
// do something
}
答案 5 :(得分:0)
有几种方法,我建议你做一些事情:
private const string _searched = "A|B|C|";
private void button1_Click(object sender, EventArgs e)
{
string search = "B" + "|";
if (_searched.IndexOf(search) > -1)
{
//do something
}
}
还有很多其他方法可以解决这个问题,搜索字段越大,使用数组,哈希表或集合的可能性就越高。只要您的可能性仍然很小,使用简单的字符串将是您的最佳表现。更复杂的数组或对象(或对象数组......)的所有开销都是不必要的。
答案 6 :(得分:-1)
可能你最好的选择是Select Case (switch in C#)声明。
编辑:抱歉Select Case是VB.NET(我的常用语言),它是用C#切换的。