数组设置在启动时抛出错误 - CS0021错误(C#)

问题描述 投票:0回答:2

我想通过创建一个小程序来实践制作数组,该程序允许用户输入数组所具有的元素,然后创建一个包含用户输入的元素数量的数组,并用数字填充所有元素。例如:如果输入3,它将生成3个元素,填充元素1的编号为1,编号2编号为2,依此类推。虽然每次都会出现特定错误:CS0021无法将[]索引应用于“方法组”类型的表达式这是我的代码:

       static void Main(string[] args)
    {
        int num;
        string getNum;
        getNum = Console.ReadLine();
        num = Int32.Parse(getNum);
        int[] array = new int[num];
        Console.WriteLine("Array created with {0} elements.",num);
    }
    static void Array(int input)
    {
        int num = 1;
        int inum = input;
        while(inum >= input)
        {
            Array[inum] = num;
            Console.WriteLine("{0}",input);
            Console.WriteLine("{0}", num);
            inum = inum - 1;
            num = num + 1;
        }

如果您决定帮助我,请提前致谢:)

c# arrays
2个回答
0
投票

在你的程序中,qazxsw poi是一种方法。

因此,Array行是错误的,因为Array[inum] = num是一种方法,并且您不能将索引器(Array)应用于方法。

实现您想要的最快捷方式如下:

[]

在你的主要方法中:

static int[] Array(int input) // Change return type to return an array of integers
{
    var result = new int[input]; // Declare a local variable to hold a new array of size input.

    // Change while to basic for loop
    for (int i = 0; i < input; i++)
    {
        result[inum] = i + 1; // set elements of the result array.
        Console.WriteLine("{0}",input);
        Console.WriteLine("{0}", i);
    }
}

或者你可以使用一个简单的Linq语句:

static void Main(string[] args)
{
    int num;
    string getNum;
    getNum = Console.ReadLine();
    num = Int32.Parse(getNum);
    int[] array = Array(num); // Change this to call the Arrra(int num) method
    Console.WriteLine("Array created with {0} elements.",num);
}

0
投票

好吧,让我们稍微整理你的代码,并尝试让它做你想做的事情:

让我们首先从你的Enumerable.Range(1, input).ToArray(); 方法中获取任何逻辑,并编写特定的方法,向你的目标迈出一小步。记住,你制作方法越小,就越难找到写错误的方法。如果你正在学习,那就开始变得荒谬,并且随着你获得自信而变大。

好吧,有一个概念就是要求用户输入一个数字,让我们编写一个方法来执行此操作,并使其在此过程中尽可能健壮。请记住,用户是愚蠢的!问一个号码,他们会输入任何东西,但是:

Main

好的,所以这个方法的作用是询问用户一个正整数,并且它将一直这样做,直到用户设法输入一个有效的数字或拉动插头。无论哪种方式,我们都很安全。 public static int PromptUserForPositiveInteger(string prompt) { int number; Console.Write(prompt); var input = Console.ReadLine(); while (!int.TryParse(input, out number) || number < 0) { Console.Write("Input is not a valid number, try again: "); input = Console.ReadLine(); } return number; } 是一种从int.TryParse中提取int的安全方式;如果它可以这样做,它会给你一个数字并返回string,否则它将返回true。如果它失败了,它不会做的就是在你的脸上爆炸,这是false很乐意做的事情。避免像瘟疫一样的int.Parse,总是使用frendlier Parse

另外值得一提的是,这个方法是一个实现细节,所以它的TryParse。班上没有人需要使用它,所以不要显示它。

另请注意,我们可以对此进行概括,使调用者指定您要如何提示用户。你没有理由想要将这种方法仅限于数组大小,也许明天你需要你要喂猴子的香蕉数量!每当它便宜又容易,概括你的代码。每当概括很难,不要,你可能不会需要它并且浪费精力。

现在,我们需要的下一个任务是制作一个private数组并用值填充它。该值将是每个数组元素的索引。哦,等等,我们说无论多么荒谬,我们都会为每个任务制定一个方法!是的,我知道,但荒谬的小只是到目前为止。

int

private static int[] CreatArrayAndSetValuesToIndex(int size) { Debug.Assert(size >= 0); var array = new int[size]; for (var i = 0; i < size; i++) { array[i] = i; } return array; } 似乎是一个荒谬的长名,但它确切地告诉你该方法的作用。习惯使用描述性名称并避免使用缩写。现在使用intellisense,使用简短的神秘名称毫无意义。

还要注意参数验证。我永远不会强调这一点:总是验证你的方法的输入!如果事情在某些条件下不起作用,请确保尽一切可能避免这些情况。因为这个方法是私有的,所以CreatArrayAndSetValuesToIndex就足够了。如果它是公共表面的一部分,你需要抛出一个合适的例外(Debug.Assert作为一个恰当的想法)。

最后但并非最不重要的是,让我们自己写一个打印出ArgumentOutOfRange数组的方法,这样我们就可以确保我们的代码运行良好:

int

我已经利用了框架中已有的工具。 private static void PrintOut(int[] array) { Console.WriteLine(string.Join(Environment.NewLine, array); } 是一个漂亮的小方法,它接受任何可枚举的对象(数组就是其中之一),并使用给定的分隔符(在本例中为新行)创建其所有成员的字符串。

现在,剩下的就是把它们放在一起:

string.Join

我们完成了!

© www.soinside.com 2019 - 2024. All rights reserved.