Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 运行时出现空引用异常_C#_Nullreferenceexception - Fatal编程技术网

C# 运行时出现空引用异常

C# 运行时出现空引用异常,c#,nullreferenceexception,C#,Nullreferenceexception,我在运行以下代码时遇到空引用异常。我创建了一个类,其中返回一组对象。打印主类中的值 //main class where i am calling employee class. class Program { static void Main(string[] args) { //Creating an object for employee class. Employees

我在运行以下代码时遇到空引用异常。我创建了一个类,其中返回一组对象。打印主类中的值

//main class where i am calling employee class.
class Program
    {
            static void Main(string[] args)
            {
                //Creating an object for employee class.
                Employees obje = new Employees();
                var obj2 = obje.EmployeeDetails();

                //looping through each object and printing the values.
                foreach (var emp in obj2)
                {
                    Console.WriteLine(emp.Employeeid);
                    Console.WriteLine(emp.Employeename);
                    Console.WriteLine(emp.Employeeage);
                }
                Console.ReadKey();
            }
        }


    //Employee class with some properties and function. 
     class Employees
        {
            public int Employeeid { get; set; }
            public string Employeename { get; set; }
            public string Employeeage { get; set; }


            public Employees[] EmployeeDetails()
            {
                Employees[] objEmployees = new Employees[2];

                objEmployees[0].Employeeage = "20";
                objEmployees[0].Employeeid = 101;
                objEmployees[0].Employeename = "Arjunan";

                objEmployees[1].Employeeage = "24";
                objEmployees[1].Employeeid = 102;
                objEmployees[1].Employeename = "Shiva";

                return objEmployees;
            }
        }

请告诉我哪里出了错。我是网络世界的新手。

首先,您需要使用
new
关键字创建数组元素

 objEmployees[0] = new Employees();
 objEmployees[0].Employeeage = "20";

员工[]对象员工=新员工[2];//这将创建数组,而不是其中的项目。

您的
员工
是一个
。这就是为什么它是引用类型。如果使用引用类型创建数组,则默认情况下,所有数组项都初始化为
null

这意味着您的
objeemployees[0]
默认为
null
,您尝试设置null的属性。这就是为什么你会这样

数值数组元素的默认值设置为零、和 参考元素设置为空。

作为一种解决方案,您可能需要为数组项创建一个新的
Employees
对象(使用
new
关键字),或者您可以使用数组初始值设定项,如。

这样做:

    public Employees[] EmployeeDetails()
    {
        Employees[] objEmployees = new Employees[2];
        objEmployees[0] = new Employees();//Note to the new instance
        objEmployees[0].Employeeage = "20";
        objEmployees[0].Employeeid = 101;
        objEmployees[0].Employeename = "Arjunan";

        objEmployees[1] = new Employees();//Note to the new instance
        objEmployees[1].Employeeage = "24";
        objEmployees[1].Employeeid = 102;
        objEmployees[1].Employeename = "Shiva";

        return objEmployees;
    }

在访问数组项之前,必须使用新对象(
Employees
)实例化它们,否则,它将等于
null
引用。

在设置值之前,需要实例化数组中的Employees类:

        public Employees[] EmployeeDetails()
    {
        Employees[] objEmployees = new Employees[2];

        objEmployees[0] = new Employees();
        objEmployees[0].Employeeage = "20";
        objEmployees[0].Employeeid = 101;
        objEmployees[0].Employeename = "Arjunan";

        objEmployees[1] = new Employees();
        objEmployees[1].Employeeage = "24";
        objEmployees[1].Employeeid = 102;
        objEmployees[1].Employeename = "Shiva";

        return objEmployees;
    }
这种方法导致了问题。创建
员工数组时,您所做的只是分配内存。实际上,您还没有创建任何
Employees
对象并将它们放置在数组中


因此,当您尝试执行
objeemployees[0].Employeeage=“20”
时,您会得到一个NullReference异常,因为在
objeemployees[0]
中不存在
Employees
对象,问题是您正在创建数组,但在尝试使用它们之前没有在数组中创建对象。在这种情况下,更好的处理方法是使用数组初始值设定项

 return new []
 {
     new Employee
     {
         EmployeeAge = 20,
         EmployeeId = 101,
         EmployeeName = "Arjunan",
     },
     new Employee
     {
         EmployeeAge = 24,
         EmployeeId = 102,
         EmployeeName = "Shiva",
     },
 };
注意,我已经让属性的名称遵循PascalCase,并假设age属性确实应该是数字,而不是字符串。

试试这个

 public Employees[] EmployeeDetails()
    {
        var objEmployees = new Employees[2];
        objEmployees[0] = new Employees();
        objEmployees[0].Employeeage = "20";
        objEmployees[0].Employeeid = 101;
        objEmployees[0].Employeename = "Arjunan";

        objEmployees[1] = new Employees();
        objEmployees[1].Employeeage = "24";
        objEmployees[1].Employeeid = 102;
        objEmployees[1].Employeename = "Shiva";



        return objEmployees;

    }

您需要为每一个objEmployees创建一个实例,具体在哪一行?这就是我得到空引用异常的地方。objEmployees[0]。Employeeage=“20”;
 public Employees[] EmployeeDetails()
    {
        var objEmployees = new Employees[2];
        objEmployees[0] = new Employees();
        objEmployees[0].Employeeage = "20";
        objEmployees[0].Employeeid = 101;
        objEmployees[0].Employeename = "Arjunan";

        objEmployees[1] = new Employees();
        objEmployees[1].Employeeage = "24";
        objEmployees[1].Employeeid = 102;
        objEmployees[1].Employeename = "Shiva";



        return objEmployees;

    }