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;
}