我在单元测试中有以下委托(delegate)函数,并且效果很好
List<Record> RecordSet = FileData.RecordSet;
Record result = RecordSet.Find(
delegate(Record r)
{
return r.UserID == "12345";
}
);
效果很好。我需要多次执行此搜索,因此我尝试将其添加到一个我可以调用的函数中,该函数将 UserID 作为参数,它非常相似,但由于某种原因,总是返回 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。更奇怪的是,当我处于 Debug模式并查看 RecordSet 中的值时,我确实看到了具有确切 UserID 的记录。然而由于某种原因,没有结果,但上面第一个函数中相同的代码和相同的数据返回了一个很好的结果。
此外,仅供引用,我喜欢 LINQ 解决方案:
Record result = RecordSet.Where(x => x.UserID == "12345").Select(x => x).First();
但我专门寻找委托(delegate)解决方案失败的原因
最佳答案
问题是你的方法总是返回null
,因为这一行:
return null;
用这个替换它,你应该会有更好的运气:
return result;
但是,您可以使用 lambda 表达式来简化此过程,该表达式接受 Record
并返回 bool
。试试这个:
return RecordSet.Find(r => r.UserID.Trim() == UserID);
关于c# - 创建接受参数的委托(delegate)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339579/