我在单元测试中有以下委托功能,而且效果很好
List<Record> RecordSet = FileData.RecordSet;
Record result = RecordSet.Find(
delegate(Record r)
{
return r.UserID == "12345";
}
);
它很有效。我需要多次执行此搜索,所以我曾尝试将其添加到我可以调用的函数中,该函数将UserID作为参数,它非常相似,但由于某种原因,ALWAYS返回null。
public Record findRecord(List<Record> RecordSet, string UserID)
{
Record result = RecordSet.Find(
delegate(Record r)
{
return r.UserID.Trim() == UserID;
}
);
return null;
}
我也尝试通过硬编码“12345”作为UserID值,也返回null。更奇怪的是,当我处于调试模式并且查看RecordSet中的值时,我确实看到具有确切UserID的Record。但由于某种原因,没有结果,但上面第一个函数中相同的代码和相同的数据返回结果就好了。
另外,仅供参考,我喜欢这个问题的LINQ解决方案:
Record result = RecordSet.Where(x => x.UserID == "12345").Select(x => x).First();
但我特意寻找委托解决方案失败的原因
答案 0 :(得分:5)
问题是你的方法总是返回null
,因为这行:
return null;
替换它,你应该有更好的运气:
return result;
但是,您可以使用lambda表达式来简化此操作,该表达式需要Record
并返回bool
。试试这个:
return RecordSet.Find(r => r.UserID.Trim() == UserID);