gpt4 book ai didi

c# - Lambda 用法让我感到困惑

转载 作者:行者123 更新时间:2023-11-30 13:27:53 26 4
gpt4 key购买 nike

所以我正在实现一本书中的一个项目,我对为什么需要这些 lambda 感到有些困惑。

public class Cart
{
private List<CartLine> lineCollection = new List<CartLine>();
public class CartLine
{
public Product Product { get; set; }
public int Quantity { get; set; }
}
public void RemoveLine(Product product)
{
lineCollection
.RemoveAll(p => p.Product.ProductID == product.ProductID);
}
}

为什么我需要 .RemoveAll(p=> p.Product.ProductID == product.ProductID)?它只与需要 lambda 表达式的 .RemoveAll 有关吗?我不确定为什么我不能使用 this.Product.ProductID,我意识到 Product 是一个列表,是 p=> P.Product 进行某种迭代并比较这些值,直到找到所需的值?

产品定义在

public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
}

我通常对 Lambda 在这些事情中的用途感到困惑。是否有一些等同于 p=>p.Product.ProductID == product.ProductID我可以看到不使用 Lambdas,所以我可以更多地理解它的简写形式??

我似乎无法解决这个问题,在此先感谢。

最佳答案

它们是代表的简写。在您的情况下,没有 lambda 的相同代码将如下所示:

    public void RemoveLine( Product product )
{
var helper = new RemoveAllHelper();
helper.product = product;

lineCollection.RemoveAll( helper.TheMethod );
}

class RemoveAllHelper
{
public Product product;
public bool TheMethod( CartLine p ) { return p.Product.ProductID == product.ProductID; }
}

因为您的 lambda 包含一个在 lambda 外部定义的变量(称为“绑定(bind)”或“捕获”变量),编译器必须创建一个带有字段的辅助对象来放入该变量。

对于没有绑定(bind)变量的 lambda,可以使用静态方法:

    public void RemoveLine( Product product )
{
lineCollection.RemoveAll( TheMethod );
}

public static bool TheMethod( CartLine p ) { return p.Product.ProductID == 5; }

当唯一的绑定(bind)变量是 this 时,可以使用同一对象上的实例方法:

    public void RemoveLine( Product product )
{
lineCollection.RemoveAll( this.TheMethod );
}

public bool TheMethod( CartLine p ) { return p.Product.ProductID == this.targetProductID; }

关于c# - Lambda 用法让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8513983/

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