我很惊讶今天发现C#不支持动态大小的数组.那么VB.NET开发人员如何使用ReDim Preserve在C#中处理这个问题呢?
在函数的开头我不确定数组的上限.这取决于从数据库返回的行.
Jon*_*eet 75
VB.NET也没有动态大小的数组的想法--CLR不支持它.
相当于"Redim Preserve"是Array.Resize<T>- 但您必须注意,如果对原始数组有其他引用,则根本不会更改它们.例如:
using System;
class Foo
{
static void Main()
{
string[] x = new string[10];
string[] y = x;
Array.Resize(ref x, 20);
Console.WriteLine(x.Length); // Prints out 20
Console.WriteLine(y.Length); // Still prints out 10
}
}
Run Code Online (Sandbox Code Playgroud)
证明这相当于Redim Preserve:
Imports System
Class Foo
Shared Sub Main()
Dim x(9) as String
Dim y as String() = x
Redim Preserve x(19)
Console.WriteLine(x.Length)
Console.WriteLine(y.Length)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
这两个计划是等效的.
如果你真的想要一个动态大小的集合,你应该使用List<T>(或类似的东西).直接使用数组存在各种问题 - 有关详细信息,请参阅Eric Lippert的博客文章.这并不是说你应该总是以任何方式避开它们 - 但你需要知道你在处理什么.
Mic*_*l L 11
请改用ArrayLists或Generics
你真的不应该使用 ReDim,它可能非常昂贵。我更喜欢 List(Of T),但是这方面有很多选择。
也就是说,您有一个问题,这就是您的答案。
x = (int[]) Utils.CopyArray((Array) x, new int[10]);
Run Code Online (Sandbox Code Playgroud)