使用获胜表格中文本框的输入来设置数组的大小

时间:2019-06-13 21:00:27

标签: c#

我正在尝试使用Form1中给出的输入来定义数组的大小,但是却收到一条错误消息,指出字段初始化程序不能使用非静态字段。在CLI中,这始终对我有用,但由于某种原因,它在这里不起作用。

    namespace Class_Grade_Register
    {
        public partial class Student_Input : Form
        {
            int number_Of_Students = 0;
            int counter = 0;

            string[] studentName = new string[number_Of_Students];
            int[] sfcGrade = new int[number_Of_Students]; // this is where I am getting the error. number_Of_Students is being underlined in red.
            int[] csGrade = new int[number_Of_Students];
            int[] sdtGrade = new int[number_Of_Students];
            int[] ddoocpGrade = new int[number_Of_Students];


            public Student_Input()
            {
                InitializeComponent();

            }

            public void Set_Number_Of_Students(int value)
            {
                number_Of_Students = value;
            }

3 个答案:

答案 0 :(得分:0)

尝试将number_Of_Students设为静态,如下所示:

<MarkerClusterer
  options={{
    imagePath:
      "https://developers.google.com..."
  }}
>
  {clusterer =>
    listings.map((location, i) => (
      <Pin key={i} position={location} clusterer={clusterer} />
    ))
  }
</MarkerClusterer>

,此外,您还需要将Set_Number_Of_Students方法修改为如下所示:

static int number_Of_Students = 0;

答案 1 :(得分:0)

<CompanyTypes>
<Parent1>
   <ChildNode1>Test1</ChildNode1>
   <ChildNode2>Test</ChildNode2>
   <CompanyType>
      <CompanyTypeID>1</CompanyTypeID>
      <CompanyTypeName>Individual</CompanyTypeName>
      <CompanyTypeDesc>Individual</CompanyTypeDesc>
      <IsBusiness>Y</IsBusiness>
   </CompanyType>
 </Parent1>
 <Parent1>
   <ChildNode1>Test3</ChildNode1>
   <ChildNode2>Test9</ChildNode2>
   <CompanyType>
      <CompanyTypeID>1</CompanyTypeID>
      <CompanyTypeName>Individual</CompanyTypeName>
      <CompanyTypeDesc>Individual</CompanyTypeDesc>
      <IsBusiness>Y</IsBusiness>
   </CompanyType>
 </Parent1>
</CompanyTypes>

here所述,编译器不一定会在sfcGrade之前初始化number_of_students,从而导致sfcGrade的索引大小为未定义的int。

答案 2 :(得分:0)

表示复杂数据的惯用方式(基本上是必须将两个整数或字符串连接在一起的任何方式)是通过创建类。初学者奇怪地不愿意这样做,而是创建数组或多个变量,例如student1Namestudent2Name等。

不要那样,类是面向对象编程中的基本概念,您必须对它们感到满意。首先是这样的:

public class Student
{
    public string Name { get; }
    public int Grade { get; }

    public Student(string name, int grade)
    {
        Name = name ?? throw new ArgumentNullException(nameof(name));
        Grade = (grade > 0) ? grade : throw new ArgumentException(nameof(grade));
    }
}

根据需要添加新属性。当您发现有问题时,也要养成抛出异常的习惯。初学者有一个隐藏异常的坏习惯。这样做会在数据中放入错误,并阻止您发现它们。

现在您可以开始创建学生了:

var me = new Student("Dour High Arch", 10);

如果要创建一堆学生,请使用列表或集合:

var students = new List<Student>().
students.Add(me);

您的代码中还有另一个错误的设计;在添加学生之前询问学生总数。如果添加的学生不如您的总数那么多,这会导致诸如空引用的问题,或者如果添加的学生比您的总数多,则会导致超出范围的异常。此外,在许多现实情况下,您不知道有多少学生或有多少学生,除非您全部添加了他们。使用更像这样的设计:

while (true)
{
    var nextStudent = GetStudentFromSomewhere();
    if (nextStudent == null)
        break;

    students.Add(nextStudent);
}

数组是为必须始终包含一定数量的元素并且不能更改的集合而设计的,例如一年中的月份。如果您希望更改元素的数量,则不应使用数组。