【问题标题】:I am creating an array and I want to specify it's length from a constructor我正在创建一个数组,我想从构造函数中指定它的长度
【发布时间】:2020-12-24 05:50:57
【问题描述】:

在我的 C# 代码中,我有 2 个类,一个称为“Names”,如您所见,它非常简单,它有一个索引器和一个数组,另一个类是“Program 类”,它具有 Main方法

    class Names
{
    private static int _length;
    private static string[] namesArray = new string[_length];

    public string this[int i]
    {
        get => namesArray[i];
        set => namesArray[i] = value;
    }

    public Names(int length)
    {
        _length = length;
    }
}

    class Program
{
    static void Main()
    {
        Names names = new Names(10);
        names[0] = "Jerry";
        Console.WriteLine(names[0]);
        Console.ReadKey();
    }
}

当我运行代码时......它给了我一个“IndexOutOfRangeException”,因为名称数组是空的...... 我尝试将数组长度硬编码为 10,而不是将“_length”传递给数组.. 它运行良好.. 我还尝试使 _length 变量为非静态变量,但它给了我一个错误,它必须是静态的...... 我试图调试它并知道错误在哪里。我发现“_length”变量是10,因为我从构造函数中分配了它。但是当我将变量传递给数组时,数组仍然是空的。 我只需要从构造函数中指定数组长度。

【问题讨论】:

  • 这显然与 Unity 无关,因为它是一个控制台应用程序。此外,[visual-studio] 标记不正确,因为此问题与 Visual Studio 应用程序 无关,并且标记信息指出您不应将其用于仅使用 Visual Studio 编写的代码.请注意只添加适当的标签。充其量它会激怒那些遵循不当使用标签的人,最坏的情况是它会使您的问题变得混乱,因为您向我们提供了有关您项目的错误信息。
  • 探索“静态”修饰符的含义和含义。长话短说,这意味着内存信息中的静态信息,即信息将保留在那里并且不会消失。然而,这个概念有一些洞察力,并且初始化可能很棘手,因为它与常规的非静态元素不同。您可以先查看this。请注意,必须在运行时初始化的静态变量,而不是您的数组初始化:)
  • 希望这有助于分享代码并尝试一下rextester.com/live/NRKW7686

标签: c# arrays error-handling


【解决方案1】:

删除数组的初始化,因为它的 _length 变量尚未设置

同时删除 Static 关键字,因为它不在这里使用

private string[] namesArray;
private int _length;

从构造函数初始化

public Names(int length)
{
    _length = length;
    namesArray = new string[_length];
}

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2018-04-26
    • 1970-01-01
    • 2021-07-06
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多