VB.NET空字符串数组

58

我该如何创建一个空的一维字符串数组?


@Pacane 请阅读此内容:http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles。 - Nikita Volkov
11个回答

50

VB在数组声明中使用0索引, 所以类似Dim myArray(10) as String这样的声明将会给你11个元素。当从C语言翻译过来时,这是一个常见的错误。

因此,对于一个空数组,以下任一方式都可以:

Dim str(-1) as String ' -1 + 1 = 0, so this has 0 elements
Dim str() as String = New String() { } ' implicit size, initialized to empty

3
我一直使用Dim str() as String = New String() { },因为我觉得这是最好的方法来表明这是一个空字符串数组"{ }"。 - Ignacio Soler Garcia
2
Mark,Dim str(0) 会生成一个长度为1的数组,其中索引0处为NULL。第二种方式,Dim str()...{} 会生成一个长度为零的空数组,正如YonahW所期望的那样。 - Randy Eppinger
@RandyEppinger是正确的(过去3年一直如此...)。str(0)确实会产生长度为1的数组(因为从0开始索引意味着长度比声明多1)。我应该放置str(-1)(当+1时,它会给你长度为0)。 - Mark Brackett
我不太愿意删除你的一半回答,但是由于Chris已经修改了他的回答,所以它现在变得多余了。也许这可以缩减为只回答问题呢?很抱歉打扰了这么老的帖子。 - default

40

试试这个:

Dim strEmpty(-1) As String

11
因为它是正确的所以点赞。然而,为了更清晰,我更喜欢Mark提供并得到SoMoS认可的Dim strEmpty() As String = New String() {}。然而,Mark描述了两种不等价的技术...请参见该评论。 - Randy Eppinger
11
更新...我们发现以下代码具有相同效果且更为简洁:Dim myArray() As String - Randy Eppinger
Dim s$(-1)Dim s$() = {} - Slai
2
一个简单的 Dim empty As String = {} 是最优雅的版本。 - Carl Onager
Dim s$() = {} 被 VB 转换器所憎恶... 在我看来,(-1) 语法更具 VB 风格。 - Larry

9
您创建的数组 Dim s(0) As String 不是空的
在 VB.Net 中,您在数组中使用的下标是最后一个元素的索引。VB.Net 默认从 0 开始索引,因此您已经有了一个具有一个元素的数组。
相反,建议尝试使用 System.Collections.Specialized.StringCollection 或者(更好的选择)System.Collections.Generic.List(Of String)。它们基本上与字符串数组相同,但对于添加和删除项更加便利。 而且,说实话:您很少会创建一个 字符串数组而不想向其中添加 至少 一个元素。
如果确实需要一个空的字符串数组,请像这样声明:
Dim s As String()

或者

Dim t() As String

4
Joel,这并没有提供所请求的行为。这些中的每一个,t和s都是空的。YonahW想要一个空数组,GR8DA的解决方案提供了这个,尽管我更喜欢: Dim strEmpty() As String = New String() {} - Randy Eppinger

8
您不必两次使用String,也不必使用New。
以下任何一种方法都可以正常工作...
Dim strings() as String = {}
Dim strings as String() = {}

8

类似于:

Dim myArray(9) as String

这将为您提供一个包含10个字符串引用的数组(每个引用都指向“Nothing”)。

如果您在声明时不确定大小,可以像这样声明一个字符串数组:

Dim myArray() as String

然后你可以稍后将其指向一个适当大小的字符串数组:

ReDim myArray(9) as String

ZombieSheep关于在不知道总大小且需要动态填充的情况下使用List是正确的。在VB.NET中,可以这样实现:

Dim myList as New List(Of String)
myList.Add("foo")
myList.Add("bar")

然后从该列表中获取数组:

myList.ToArray()

@Mark

感谢您的纠正。


4
另一种方法是这样的:
Dim strings() As String = {}

测试一个空字符串数组:

MessageBox.Show("count: " + strings.Count.ToString)

显示一个弹框,上面写着“计数:0”。


2
有点啰嗦,但是自我说明性很强...
Dim strEmpty() As String = Enumerable.Empty(Of String).ToArray

1
不确定为什么您想要这样做,但用C#的方式是:
string[] newArray = new string[0];

我猜VB不会与此有太大的不同。

如果您正在构建一个空数组,以便稍后填充它的值,那么您真的应该考虑使用

List<string>

将其转换为数组(如果您确实需要它作为数组)

newListOfString.ToArray();

1
Dim array As String() = Array.Empty(Of String)

0

我知道这是一个旧的线程,但创建一个空的一维字符串数组的另一种方法是使用 Array.Empty<T> 方法。

E.g.,

VB.NET

Dim emptyStringArray() As String = Array.Empty(Of String)()

C#

string[] emptyStringArray = Array.Empty<string>()

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