VB - 如何从通用列表中删除“空”项?

5

我有一个包含泛型列表的VB.NET(2010)项目,我正在尝试弄清楚如何从列表中删除任何“空”项。当我说“空”时,我指的是不包含任何实际字符的任何项(但它可能包含任意数量的空格或根本没有空格)。

例如,假设这是我的列表...

    Dim MyList As New List(Of String)

    MyList.Add("a")
    MyList.Add("")
    MyList.Add("b")
    MyList.Add(" ")
    MyList.Add("c")
    MyList.Add("      ")
    MyList.Add("d")

我需要这样做,如果我对该列表进行计数,它将返回4个项目,而不是7个。例如...

    Dim ListCount As Integer = MyList.Count
    MessageBox.Show(ListCount) ' Should show "4"

如果有类似于......的东西就太好了。

    MyList.RemoveEmpty

无论如何......我已经在谷歌上搜索了解决方案几个小时,但到目前为止还没有找到任何东西。所以...有什么想法吗?

顺便说一句,我正在针对此项目使用.NET 2.0框架。

提前感谢!


您需要保留“空”项以备后用,还是希望永久删除它们? - Blumer
永久删除将是最好的。 - NotQuiteThereYet
2个回答

20
您可以使用List.RemoveAll
MyList.RemoveAll(Function(str) String.IsNullOrWhiteSpace(str))

如果您不使用至少.NET 4,则无法使用String.IsNullOrWhiteSpace。然后,您可以自己实现该方法:
Public Shared Function IsNullOrWhiteSpace(value As String) As Boolean
    If value Is Nothing Then
        Return True
    End If
    For i As Integer = 0 To value.Length - 1
        If Not Char.IsWhiteSpace(value(i)) Then
            Return False
        End If
    Next
    Return True
End Function

请注意,Char.IsWhiteSpace自1.1版本以来就存在。

有点被打败了,不得不查找VB.net :) - Tony Hopkinson
我认为在代码字体中使用List.RemoveAll会获得额外的加分。 - Blumer
谢谢你们的快速回复。但是当我将那行代码粘贴到程序中时,出现了以下错误:“IsNullOrWhiteSpace”不是String的成员。有什么想法吗? - NotQuiteThereYet
谢谢Tim。我刚刚添加了那个函数,但是还是出现了相同的错误。我把所有东西都粘贴得和你写的一模一样。在那段代码中,我需要替换什么吗?非常感谢你的帮助! - NotQuiteThereYet
我解决了。对于“RemoveAll”这一行,我将其更改为 --> MyList.RemoveAll(Function(str) IsNullOrWhiteSpace(str)) 再次感谢Tim...你帮了我大忙! - NotQuiteThereYet

0

被标记为解决方案的帖子对我没有用。

试试这个:

MyList.AsEnumerable().Where(Function (x) Not String.IsNullOrEmpty(x)).ToList

这将返回一个没有空值的列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接