【问题标题】:Null reference c#空引用 c#
【发布时间】:2020-04-19 20:26:09
【问题描述】:

我正在编写一个代码,您可以在其中搜索名称,然后会弹出所教的科目等。

但是我不确定为什么,但我得到 对象引用未设置为对象的实例错误我错过了我知道的东西,有人可以帮助我吗?我尝试了不同的方法并没有真正奏效......这是我的代码:

public partial class MainWindow : Window
    {
        Course my = new Course();
        public class Course
        {

            public string[] Name { get; set; }
            public string[] Subject { get; set; }
            public string[] Hour { get; set; }

            public Course(string[] name, string[] subject, string[] hour)
            {
                this.Name = name;
                this.Subject = subject;
                this.Hour = hour;

            }
        }

        public MainWindow()
        {
            InitializeComponent();


            my.Name[0] = "Ali";
            my.Name[1] = "Sefer";

            my.Subject[0] = "INFORMATIKA";
            my.Subject[1] = "ENGLISH";

            my.Hour[0] = "12";
            my.Hour[1] = "22";

        }

        private void searchButton_Click(object sender, RoutedEventArgs e)
        {
            Find();
        }


        private void Find()
        {

            int index = 0;
            string wanted = wantedName.Text;

            while (my.Name[index] != wanted && (my.Name[index] != "END"))
            {
                index++;
            }
            if (my.Name[index] == wanted)
            {
                outputLabel.Content = " " + my.Name[index] + " "  + my.Subject[index];
            }
            else
            {
                outputLabel.Content = "Name not found";
            }
        }


    }
}

【问题讨论】:

  • 这如何编译? Course my = new Course(); 正在调用一个不存在的构造函数

标签: c# object


【解决方案1】:

您正在使用未初始化的数组。虽然您已经为 Course 类定义了一个构造函数,该构造函数接受数组的值,但您使用的是默认构造函数。尝试使用诸如

之类的参数调用您自己的构造函数
Course my = new Course(new string[2], new string[2], new string[2]);

在您可以为my.Name[0] 之类的元素赋值之前,您必须确保my.Name 引用了一个分配的数组,这意味着您的元素有可用的内存。

【讨论】:

  • OP 代码中没有默认构造函数,他们的代码甚至不应该编译
  • 我同意,发布的代码有缺陷。 OP 的原始代码可能仍然可以编译。
  • 如何编译?如果不存在用户定义的构造函数,则类只能具有隐式默认构造函数。由于 OP 定义了一个构造函数,因此不再有默认构造函数
  • 也许他只发布了部分代码。谁知道?当他遇到运行时异常时,他似乎正在运行代码。
  • 我现在看到了.... 非常感谢!会多学习,现在一切正常!
猜你喜欢
  • 2017-05-12
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2011-09-17
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多