gpt4 book ai didi

c# - 创建带参数的委托(delegate)函数

转载 作者:行者123 更新时间:2023-12-02 04:43:27 25 4
gpt4 key购买 nike

我在单元测试中有以下委托(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 的 Record。然而由于某种原因,没有结果,但上面第一个函数中的相同代码和相同数据返回结果很好。

此外,仅供引用,我喜欢 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com