繁体   English   中英

创建带有参数的委托函数

[英]Creating delegate function that takes parameters

我在单元测试中具有以下委托函数,并且效果很好

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”作为用户ID值进行硬编码来尝试它,该值也返回null。 甚至更奇怪的是,当我处于调试模式时,当我查看RecordSet中的值时,我确实看到了具有确切UserID的Record。 出于某种原因,没有结果,但是上面第一个函数中的相同代码和相同数据返回的结果恰好。

此外,仅供参考,我很喜欢LINQ解决方案:

Record result = RecordSet.Where(x => x.UserID == "12345").Select(x => x).First();

但是我正在特别寻找委托解决方案失败的原因

问题是您的方法总是由于以下行而返回null

return null;

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

return result;

但是,您可以使用接受Record并返回bool的lambda表达式来简化此过程。 尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM