C#匿名方法获胜';我跑不了。未设置对象引用
刚开始,需要所有的帮助。下面的代码将不会运行。Error msg表示“引用未设置为对象的实例”,它指向WriteLine方法中的employee引用。好心协助C#匿名方法获胜';我跑不了。未设置对象引用,c#,.net,reference,anonymous-methods,C#,.net,Reference,Anonymous Methods,刚开始,需要所有的帮助。下面的代码将不会运行。Error msg表示“引用未设置为对象的实例”,它指向WriteLine方法中的employee引用。好心协助 class Program { static void Main(string[] args) { List<Employee> empList = new List<Employee>() { new Employee { ID = 101,
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; }
}
类程序
{
静态void Main(字符串[]参数)
{
List empList=新列表()
{
新员工{ID=101,工资=6000000,Name=“Jane”},
新员工{ID=102,工资=6000000,Name=“Jane”},
新员工{ID=103,工资=6000000,Name=“James”},
新员工{ID=104,工资=6000000,Name=“Jasmie”},
新员工{ID=105,工资=6000000,Name=“Janet”},
};
谓词emPredicate=新谓词(getEmpName);
Employee=empList.Find(emp=>emPredicate(emp));
WriteLine(“ID={0},Name={1}”,employee.ID,employee.Name);
Console.ReadLine();
}
公共静态bool getEmpName(Employee em)
{
返回em.ID==002;
}
}
班级员工
{
公共int ID{get;set;}
公共整数{get;set;}
公共字符串名称{get;set;}
}
来自:
返回值类型:T
与条件匹配的第一个元素
由指定谓词定义(如果找到);否则,将显示默认值
类型T的值
它没有找到匹配项,因此返回default(t)
,即null
。在Console.WriteLine
之前添加一个空值,当然,还要更正getEmpName
谓词(我假设您需要检查em.ID==102
):
002
的员工。这就是为什么Find
方法返回null,您将得到NullReferenceException
getEmpName
不返回名称,而是返回bool,这使得谓词有点混乱。您可以将其命名为GetEmployeeById
,并且可以将id
参数添加到方法中,这样会有一些意义。您还可以使用:
Employee employee = empList.Find(emp => emp.ID == 2);
如果您只是想找到ID为2的员工。看起来您只是在getEmpName()中用手指粗敲了0而不是1。你的意思是打102而不是002吗?可能是重复的谢谢一串。输入102,它确实被编译了。我必须设法掌握基本知识和细节。谢谢你的建议。输入102,它确实被编译了。我会按照你说的命名。希望我能更好地理解异常消息。再次感谢汉克斯,特别是关于无效的那一点。我以前见过它,但现在我需要使用它,这就更有意义了。你解释Find方法的方式很深刻。有什么材料可以帮我解决这样的问题吗?再次感谢!任何方法所需的所有文档,搜索,都在那里:)注意,如果提供的任何答案对您的问题有帮助,您应该标记一个可接受的答案。要做到这一点,请勾选答案投票表下方的空复选标记,一旦单击它,它将变为绿色。谢谢。我来看看!
Employee employee = empList.Find(emp => emp.ID == 2);