创建带参数的委托函数

时间:2013-12-02 22:57:00

标签: c# .net list lambda delegates

我在单元测试中有以下委托功能,而且效果很好

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();

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

1 个答案:

答案 0 :(得分:5)

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

return null;

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

return result;

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

return RecordSet.Find(r => r.UserID.Trim() == UserID);