我在单元测试中有以下委托功能,它工作得很好
ListRecordSet = FileData.RecordSet; Record result = RecordSet.Find( delegate(Record r) { return r.UserID == "12345"; } );
它很棒.我需要多次执行此搜索,因此我尝试将其添加到我可以调用的函数中,该函数将UserID作为参数,它非常相似,但由于某种原因,ALWAYS返回null.
public Record findRecord(ListRecordSet, 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();
但我特意寻找委托解决方案失败的原因
问题是你的方法总是返回null
,因为这行:
return null;
用它替换它你应该有更好的运气:
return result;
但是,您可以使用lambda表达式来简化此操作,该表达式采用a Record
并返回a bool
.试试这个:
return RecordSet.Find(r => r.UserID.Trim() == UserID);