刚开始并需要所有帮助。以下代码将无法运行。错误消息msg表示“引用未设置为对象的实例”,它指向WriteLine方法中的employee引用。请帮助
class Program
{
static void Main(string[] args)
{
List<Employee> empList = new List<Employee>()
{
new Employee { ID = 101, Salary = 6000000, Name = "Jane" },
new Employee{ ID = 102, Salary = 6000000, Name = "Jane" },
new Employee { ID = 103, Salary = 6000000, Name = "James" },
new Employee{ ID = 104, Salary = 6000000, Name = "Jasmie" },
new Employee { ID = 105, Salary = 6000000, Name = "Janet" },
};
Predicate<Employee> emPredicate = new Predicate<Employee>(getEmpName);
Employee employee = empList.Find(emp=> emPredicate(emp));
Console.WriteLine(" ID = {0}, Name = {1}",employee.ID,employee.Name );
Console.ReadLine();
}
public static bool getEmpName(Employee em)
{
return em.ID == 002;
}
}
class Employee
{
public int ID { get; set; }
public int Salary { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:5)
如果你的程序在运行时抛出一个异常,那就意味着它会编译
没有ID 002
的员工。这就是Find
方法返回null并获得NullReferenceException
的原因。
我会为我的方法使用更合适的名称。例如getEmpName
没有返回名称,它返回 bool ,这会使您的谓词有点混乱。您可以将其命名为GetEmployeeById
,然后您可以在方法中添加id
参数,然后它就会有所帮助。您也可以使用:
Employee employee = empList.Find(emp => emp.ID == 2);
如果您只是想找到ID为2的员工。
答案 1 :(得分:4)
来自List<T>.Find
:
返回值类型:T
匹配条件的第一个元素 由指定的谓词定义,如果找到;否则,默认 类型T的值。
找不到匹配项,因此返回default(T)
,即null
。在Console.WriteLine
之前添加无效,当然,更正您的getEmpName
谓词(我假设您要检查em.ID == 102
):
if (employee != null)
{
Console.WriteLine(" ID = {0}, Name = {1}",employee.ID,employee.Name );
}