我很惊讶今天发现C#不支持动态大小的数组.那么VB.NET开发人员如何使用ReDim Preserve在C#中处理这个问题呢?
在函数的开头我不确定数组的上限.这取决于从数据库返回的行.
VB.NET也没有动态大小的数组的想法--CLR不支持它.
相当于"Redim Preserve"是Array.Resize
- 但您必须注意,如果对原始数组有其他引用,则根本不会更改它们.例如:
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 } }
证明这相当于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
这两个计划是等效的.
如果你真的想要一个动态大小的集合,你应该使用List
(或类似的东西).直接使用数组存在各种问题 - 有关详细信息,请参阅Eric Lippert的博客文章.这并不是说你应该总是以任何方式避开它们 - 但你需要知道你在处理什么.
请改用ArrayLists或Generics
使用List