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

标签 c# .net list lambda delegates

我在单元测试中有以下委托(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/

相关文章:

c# - 字符串属性是否可以具有函数?

c# - 当键是枚举时,以 "Document"表示序列化字典

.net - StringBuilder Append 和 AppendLine 对于 Enum 给出不同的结果

python - 嵌套字典和列表的大小

python 列表数学索引变量

c# - 如何使用 C# 互操作传递 dbFailOnError 参数?

c# - 正则表达式可以支持找不到东西吗?

c# - 在自托管 WebApi 中获取 HttpRequest 上下文

c# - 'External table is not in the expected format' 异常问题

python - 从列表中的元组中剥离字符