这个解决方案给了我预期的结果。如果stringToCheck的值存在,我正在尝试查看字符串!但我想以一种不错的方式,linq或更少的代码。
string stringToCheck = "testtest";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
foreach (string x in stringArray)
{
if (x.Contains(stringToCheck))
{
// System.Console.Write("{0} ", x.Contains(stringArray[0]));
string result = "No Found";
switch (stringToCheck)
{
case "text1":
if (x.Contains(stringArray[0]))
result = "text1";
break;
case "testtest":
if (x.Contains(stringArray[1]))
result = "testtest";
break;
}
System.Console.Write("{0} ", result);
Console.ReadLine();
}
}
编辑:代码没有按照我的预期行事,如果我更改string stringToCheck = "testtest longer string";
我希望它返回 testtest 使用此代码,不会返回任何内容
答案 0 :(得分:1)
您的示例中的代码不会按照您的说法执行操作...
你说你想要这个:“如果我的数组的值存在,我正试图查看字符串”
查看数组以检查它是否包含某个值,可以使用Contains
方法完成:
Console.WriteLine(stringArray.Contains(stringToCheck) ? stringToCheck : "No found");
答案 1 :(得分:1)
最简单的方法是在对搜索字符串执行Intersect
操作后使用Split
扩展方法:
var q = stringToCheck.Split(' ').Intersect(stringArray);
在你的linq查询中进一步应用FirstOrDefault
可以获得第一个在'字符串中匹配'序列匹配的字符串,如果没有找到,则返回null。
string sFound = q.FirstOrDefault();
答案 2 :(得分:0)
包含会返回true或false
它指示IEnumerable集合是否具有与参数匹配的元素。当包含IEnumerable
命名空间时,它会对任何System.Linq
集合起作用。
string stringToCheck = "testtest";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
bool b = stringArray.Contains(stringToCheck);
注意:
包含是extension method
,可以在数组,列表和某些其他集合上调用。
答案 3 :(得分:0)
有几种方法可以做到这一点,人们已经回答了Contains()
另一种可以使用的方法Any()
:
stringArray.Any(m => m == stringToCheck)
您还可以使用Array.IndexOf()
:
Array.IndexOf(stringArray, stringToCheck)>-1 ? true : false
然而,在所有方法中,使用Array.IndexOf()
似乎是最快的。您可以看到详细的比较here。当您尝试搜索数百万大小的数组时:
<强>结果:强>
foreach loop search
:391 ms
for loop search
:412毫秒
Contains() method search
:185 ms
Any() method search
:1011 ms
Via Index
:141 ms