gpt4 book ai didi

c# - 使用 lambda 避免空检查

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:41 24 4
gpt4 key购买 nike

在这篇文章中Avoid Null Checks by replacing finders with tellers作者给出了一个 Ruby 示例来避免空检查,如果返回对象则 block 运行,否则不运行。

 data_source.person(id) do |person|
person.phone_number = phone_number
data_source.update_person person
end

我想在 C# 中使用 lambda 函数做同样的事情,但在想出一个做同样类型事情的例子时遇到了麻烦。您会创建对象工厂来接受 ID 号和 lambda 函数吗?

最佳答案

嗯,我不了解 Ruby,也不理解给出的确切示例,但我怀疑应该是这样的:

dataSource.Update(id, person => person.PhoneNumber = phoneNumber);

在哪里DataSource.Update会:

  • 签名类似 void Update(string id, Action<Person> updateAction (或者可能返回一个 bool 来表明它是否找到了那个人)
  • 实现为:
    • 找到具有给定 ID 的人
    • 如果不存在,立即返回
    • 否则,执行给定的操作,并用修改后的对象更新后备存储

或者更一般地(更接近原始的 Ruby):

dataSource.WithPerson(id, person => {
person.PhoneNumber = phoneNumber;
dataSource.UpdatePerson(person);
};

就我个人而言,我更喜欢第一种形式:它更具体地说明了它要实现的目标,但这很可能有助于实现更好的实现,而且它在调用代码中肯定更清晰。

关于c# - 使用 lambda 避免空检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17452995/

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