C#匿名方法将无法运行.未设置对象引用

Doo*_*Doo 2 .net c# reference anonymous-methods

刚开始并需要所有的帮助.以下代码将无法运行.错误消息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; }
}
Run Code Online (Sandbox Code Playgroud)

Sel*_*enç 5

  1. 如果你的程序在运行时抛出一个异常,那就意味着它会编译

  2. 没有员工身份证002.这就是为什么该Find方法返回null并且你得到了NullReferenceException.

  3. 我会为我的方法使用更合适的名称.例如getEmpName,不返回它返回bool的名称,这会使您的谓词有点混乱.你可以命名它 GetEmployeeById,你可以id在你的方法中添加一个参数然后它是有道理的.你也可以使用:

    Employee employee = empList.Find(emp => emp.ID == 2); 
    
    Run Code Online (Sandbox Code Playgroud)

如果您只是想找到ID为2的员工.