创建带参数的委托函数

Jos*_*osh 2 .net c# lambda delegates list

我在单元测试中有以下委托功能,它工作得很好

List<Record> RecordSet = FileData.RecordSet;
Record result = RecordSet.Find(
        delegate(Record r)
        {
            return r.UserID == "12345";
        }
    );
Run Code Online (Sandbox Code Playgroud)

它很棒.我需要多次执行此搜索,因此我尝试将其添加到我可以调用的函数中,该函数将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;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试通过硬编码"12345"作为UserID值,也返回null.更奇怪的是,当我处于调试模式并且查看RecordSet中的值时,我确实看到具有确切UserID的Record.但由于某种原因,没有结果,但上面第一个函数中相同的代码和相同的数据返回结果就好了.

另外,仅供参考,我喜欢LINQ解决问题的方法:

Record result = RecordSet.Where(x => x.UserID == "12345").Select(x => x).First();
Run Code Online (Sandbox Code Playgroud)

但我特意寻找委托解决方案失败的原因

p.s*_*w.g 5

问题是你的方法总是返回null,因为这行:

return null;
Run Code Online (Sandbox Code Playgroud)

用它替换它你应该有更好的运气:

return result;
Run Code Online (Sandbox Code Playgroud)

但是,您可以使用lambda表达式来简化此操作,该表达式采用a Record并返回a bool.试试这个:

return RecordSet.Find(r => r.UserID.Trim() == UserID);
Run Code Online (Sandbox Code Playgroud)