【问题标题】:VB.NET Array Contains method does not workVB.NET Array Contains 方法不起作用
【发布时间】:2013-09-27 17:44:14
【问题描述】:

在 VB.NET 中,我试图确定给定字符串是否存在于字符串数组中。根据我的研究,数组有一个我可以使用的“包含”方法,所以代码看起来像这样:

Dim fileTypesZ As String() = {"PDF", "TXT", "DOC", "DOCX", "XLS", "XLSX", "JPG", "JPGE", "BMP", "GIF"}

If (fileTypesZ.Contains(tempTest)) Then

End If

但是,VB.NET 说“包含”不是“System.Array”的成员。我可以使用另一种方法吗?

【问题讨论】:

  • 如果您使用 .NET 2,您可以使用 List.ContainsDim fileTypesZ = new List(Of String)({"PDF", "TXT", "DOC", "DOCX", "XLS", "XLSX", "JPG", "JPGE", "BMP", "GIF"})
  • @varocarbas 它只有在你有 Imports System.Linq 的情况下才有效(见我的回答) - 这是默认设置,所以大多数人都这样做,但如果它被删除,这将不起作用原样
  • @ReedCopsey 我没有导入 System.Linq。如果您打开一个新项目(VS 2008 或 2010)并编写此代码,它会起作用。
  • @varocarbas:另一种可以用于 .NET 2 的方法是 Array.Find
  • @TimSchmelter 你提出了很多有效的观点,你为什么不写一个答案?它可能是 Reed Copsey 的替代品(如果您不能使用“包含”,则可以使用其他选项)。

标签: asp.net arrays vb.net


【解决方案1】:

Array 上没有Contains,但有Enumerable.Contains,这是一种适用于数组的扩展方法。

确保在文件顶部包含Imports System.Linq,并且在项目引用中引用System.Core.dll

【讨论】:

    【解决方案2】:

    您正在使用什么框架?我在 4 Full 中运行它并且它有效:

    Sub Main()
        Dim fileTypesZ As String() = {"PDF", "TXT", "DOC", "DOCX", "XLS", "XLSX", "JPG", "JPGE", "BMP", "GIF"}
    
        If (fileTypesZ.Contains("PDF")) Then
            MsgBox("Yay")
        End If
    End Sub
    

    请记住,array.contains 使用相等,因此“PDF”有效,“PD”无效。如果您正在寻找部分匹配,您可能需要使用 indexof 进行迭代。

    在这种情况下尝试: Dim fileTypesZ As String() = {“PDF”、“TXT”、“DOC”、“DOCX”、“XLS”、“XLSX”、“JPG”、“JPGE”、“BMP”、“GIF”}

        If (fileTypesZ.Contains("PD")) Then
            MsgBox("Yay")
        Else
            For i = 0 To fileTypesZ.Length - 1
                If fileTypesZ(i).IndexOf("PD") = 0 Then
                    MsgBox("Yay")
                End If
            Next
        End If
    

    【讨论】:

    • 您的答案的第一部分已经由 Reed Copsey 的(以及他上面的 cmets)解释过:.Contains 不是数组的方法之一;您可以通过来自 LINQ 的Enumerable.Contains 将其与数组一起使用。因此,要使 OP 的代码正常工作,您必须考虑 LINQ:通过添加对 LINQ(在 .NET 3.5 及更高版本中)或旧版本中的整个 LINQ 库的引用 (stackoverflow.com/questions/2138/linq-on-the-net-2-0-runtime)。
    • Contains 可能是 System.Linq.Enumerable 的成员,但您不必将其添加为参考,至少在 .Net 4 上不是,它在参考中“预加载”。我用我在 VS 中测试过的代码回答了 OP 的问题,而不仅仅是评论它,也许我应该更清楚地了解 LINQ。对于 OP,请查看link,如果您有问题,请给我留言。
    • 在您写下答案之前的几个小时,我的想法和您一样(它无需参考即可工作),这就是为什么我参考上面的 cmets 和 Reed Copsey 的答案。即使您可以这样做:Dim myArray() As String myArray.Contains。此 Contains 是一种 LINQ 扩展方法,只有在项目中设置了 LINQ 引用时才能使用该方法。您可能不需要编写 Imports System.Linq,因为已预加载(如上述 cmets 之一所述)。无论如何,最安全的做法是编写 Imports System.Linq。如果您在 3.5 之前的 .NET 中,则必须添加 LINQ。
    • 请阅读我上面的评论“我没有导入 System.Linq。如果您打开一个新项目(VS 2008 或 2010)并编写此代码,它将起作用。-”和答案我得到。
    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2013-12-19
    • 2018-03-22
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多