当前位置:  开发笔记 > 编程语言 > 正文

在C#中使用Redim Preserve?

如何解决《在C#中使用RedimPreserve?》经验,为你挑选了3个好方法。

我很惊讶今天发现C#不支持动态大小的数组.那么VB.NET开发人员如何使用ReDim Preserve在C#中处理这个问题呢?

在函数的开头我不确定数组的上限.这取决于从数据库返回的行.



1> Jon Skeet..:

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的博客文章.这并不是说你应该总是以任何方式避开它们 - 但你需要知道你在处理什么.


这些技术之间存在一个区别.Array.Resize仅适用于从零开始的单维数组.Redim适用于多维数组.对零基础部分不确定

2> Michael L..:

请改用ArrayLists或Generics


更确切地说,使用List ..NET中有许多通用类或函数,它们不是可调整大小的数组.;)

3> driis..:

使用List .它将根据需要动态调整大小.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有