string array.Contains?

ser*_*hio 20 .net c# arrays .net-2.0

.NET 2

string[] myStrings = GetMyStrings();    
string test = "testValue";
Run Code Online (Sandbox Code Playgroud)

如何验证是否myStrings包含test

jas*_*son 19

在.NET 2.0中,如果需要索引,可以执行以下操作:

int index = Array.FindIndex(
    myStrings,
    delegate(string s) { return s.Equals(test); }
);
Run Code Online (Sandbox Code Playgroud)

index将是-1如果myStrings不包含test.

如果您只想检查是否存在:

bool exists = Array.Exists(
    myStrings,
    delegate(string s) { return s.Equals(test); }
);
Run Code Online (Sandbox Code Playgroud)


old*_*bam 11

我在页面http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html找到了一个优雅的答案.你在.NET 2.0中要做的就是转换为IList并调用Contains方法.

(IList<string> mystrings).Contains(test);
Run Code Online (Sandbox Code Playgroud)


Ahm*_*eed 10

这是一个符合.NET 2.0的方法.Array.Find如果找不到值,则使用将返回null.

C#方法

string[] myStrings = { "A", "B", "testValue" };
string test = "testValue";
string result = Array.Find(myStrings, delegate(string s) { return s == test; });
Console.WriteLine("Result: " + result);
Run Code Online (Sandbox Code Playgroud)

如果需要不区分大小写的匹配使用s.Equals(test, StringComparison.InvariantCultureIgnoreCase).

编辑:使用VB.NET 2.0需要更多的努力,因为它不支持匿名委托.相反,您需要添加一个Function并使用AddressOf指向它.您需要将其设置testValue为成员或属性,因为它不会传递给谓词方法.在下面的例子中我使用Array.Exists.

VB.NET方法

' field or property ' 
Dim test As String = "testValue"

Sub Main
    Dim myStrings As String() = { "A", "B", "testValue" }       
    Dim result As Boolean = Array.Exists(myStrings, AddressOf ContainsValue)
    Console.WriteLine(result)
End Sub

' Predicate method '
Private Function ContainsValue(s As String) As Boolean
    Return s = test
End Function
Run Code Online (Sandbox Code Playgroud)


Jus*_*ner 9

您可以使用List来代替使用静态数组:

List<string> myStrings = new List<string>(GetMyStrings());
if(myStrings.Contains("testValue"))
{
    // Do Work
}
Run Code Online (Sandbox Code Playgroud)

  • @serhio - 代码优先,如果需要,稍后进行优化.除非您正在大规模构建这些列表,否则确实不应该有任何问题. (5认同)

小智 7

以为我会添加另一个混合,首先在.NET 3.5中提供,我相信:

Enumerable.Contains(myStrings.ToArray(), test)
Run Code Online (Sandbox Code Playgroud)

  • 这意味着通过“使用 System.Linq”,您可以编写“myStrings.Contains(test)”,因为“Enumerable.Contains”是一个扩展方法。(顺便说一句,.NET 3.5 版使用与 .NET 2.0 版相同的 CLR,因此这通常适用于“.NET 2.0”。) (2认同)

Vil*_*lx- 2

bool ContainsString(string[] arr, string testval)
{
    if ( arr == null )
        return false;
    for ( int i = arr.Length-1; i >= 0; i-- )
        if ( arr[i] == testval )
            return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这将是有史以来最好的表现。:P