Answers:
只需使用已经内置的Contains()方法即可:
using System.Linq;
//...
string[] array = { "foo", "bar" };
if (array.Contains("foo")) {
//...
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
我知道这很古老,但是我希望新读者知道有一种使用泛型和扩展方法来执行此操作的新方法。
您可以阅读我的博客文章,以了解有关如何执行此操作的更多信息,但是主要思想是:
通过将此扩展方法添加到您的代码中:
public static bool IsIn<T>(this T source, params T[] values)
{
return values.Contains(source);
}
您可以像这样执行搜索:
string myStr = "str3";
bool found = myStr.IsIn("str1", "str2", "str3", "str4");
它适用于任何类型(只要您创建良好的equals方法)。当然,任何值类型。
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
事情,我想要做的就是浏览第一列中的who数据表,以查看值是否不以以下任何字符串结尾..如果没有,那么我想返回一个字符串,指出.00
例如,在使用您的示例时,它缺少一个值。我似乎无法使该示例正常工作,这有点棘手,因为我不想返回布尔值,但是我改变了您的方法以返回字符串,但仍然没有任何建议
public static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Linq(针对S&G):
var test = "This is the string I'm looking for";
var found = strArray.Any(x=>x == test);
或者,根据要求
var found = strArray.Any(
x=>x.Equals(test, StringComparison.OrdinalIgnoreCase));
您还可以使用LINQ遍历数组。或者,您可以使用Find方法,该方法需要委托进行搜索。但是我认为find方法要比循环遍历的方法贵一些。
这比手动遍历数组更快:
static bool isStringInArray(string[] strArray, string key)
{
if (strArray.Contains(key))
return true;
return false;
}
如果您不想或根本不能使用Linq,也可以使用static Array.Exists(...);
函数:
https://msdn.microsoft.com/zh-cn/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
var arr = new string[]{"bird","foo","cat","dog"};
var catInside = Array.Exists(
arr, // your Array
(s)=>{ return s == "cat"; } // the Predicate
);
当谓词确实返回true时,catInside也将为true。