搜索字符串字符串的简便方法

rah*_*kim 3 string search c#-2.0

我正在努力寻找最简单的方法来搜索string可能的strings 数组.我知道为角色做这个的简单方法就是使用myString.IndexOfAny(charArray).但是,如果我想搜索我stringstrings而不仅仅是角色呢?是否有任何.net技巧或方法使这更容易?

基本上,我想做这样的事情:

string myName = "rahkim";
string[] names = new string[] {"joe","bob","chris"};

if(myName.IndexOfAny(names) >= 0)
{
      //success code//
}
Run Code Online (Sandbox Code Playgroud)

我知道有很多方法可以用循环等来做到这一点.但我希望框架中固有的东西.

Sam*_*uel 10

您应该定义是否要查找相等的字符串或搜索匹配的子字符串.这两种方式都很容易预LINQ和LINQ.

string myName = "rahkim";
string[] names = new string[] { "joe", "bob", "chris" };
Run Code Online (Sandbox Code Playgroud) LINQ等同字符串
bool contains = names.Contains(myName);
Run Code Online (Sandbox Code Playgroud) LINAL之前的平等字符串
bool contains = new List<string>(name).Contains(myName);
Run Code Online (Sandbox Code Playgroud) 子串,LINQ
bool contains = names.Any(name => name.Contains(myName));
Run Code Online (Sandbox Code Playgroud) 子串,Pre-LINQ
bool contains = false;
foreach(string name in names)
  if (name.Contains(myName))
    contains = true;
Run Code Online (Sandbox Code Playgroud)


Lau*_*nce 8

如果其他人在尝试搜索像String.IndexOfAny(String [])这样的.Net方法时发现了这个,这是我的解决方案:

C#

public int IndexOfAny(string test, string[] values)
{
int first = -1;
foreach (string item in values) {
    int i = test.IndexOf(item);
    if (i >= 0) {
        if (first > 0) {
            if (i < first) {
                first = i;
            }
        } else {
            first = i;
        }
    }
}
return first;
}
Run Code Online (Sandbox Code Playgroud)

VB

Public Function IndexOfAny(test As String, values As String()) As Integer
        Dim first As Integer = -1
        For Each item As String In values
            Dim i As Integer = test.IndexOf(item)
            If i >= 0 Then
                If first > 0 Then
                    If i < first Then
                        first = i
                    End If
                Else
                    first = i
                End If
            End If
        Next
        Return first
    End Function
Run Code Online (Sandbox Code Playgroud)

您可以通过切换来执行LastIndexOfAny(String [])

i < first 
Run Code Online (Sandbox Code Playgroud)

i > first
Run Code Online (Sandbox Code Playgroud)


Pat*_*Pat 5

您也可以使用类的static IndexOf方法Array

bool hasName = Array.IndexOf(names, myName) > -1;
Run Code Online (Sandbox Code Playgroud)