C# 新手:创建enum.FirstOrDefault(),获得一个;无法隐式转换类型";
我想用C# 新手:创建enum.FirstOrDefault(),获得一个;无法隐式转换类型";,c#,lambda,ienumerator,C#,Lambda,Ienumerator,我想用findProductInventLines(int-productId)方法查找并返回第一个CartLine,它在Cart中与产品匹配。如果找不到匹配项,则返回null 但是,编译器会抛出一个错误 无法将类型:CartLine隐式转换为Product 使用FirstOrDefault()行号 对于lambda函数和委托,我是一个真正的新手。我以为它已经被line.Product.Id取消了引用,但显然我有点误解 我试着使用JaredPar的答案: 但我看不出我的代码和他的代码有什么区别
findProductInventLines(int-productId)
方法查找并返回第一个CartLine
,它在Cart
中与产品匹配。如果找不到匹配项,则返回null
但是,编译器会抛出一个错误
无法将类型:CartLine隐式转换为Product
使用FirstOrDefault()
行号
对于lambda函数和委托,我是一个真正的新手。我以为它已经被line.Product.Id
取消了引用,但显然我有点误解
我试着使用JaredPar的答案:
但我看不出我的代码和他的代码有什么区别
public class CartLine
{
public int OrderLineId { get; set; }
public Product Product { get; set; }
public int Quantity { get; set; }
}
public IEnumerable<CartLine> Lines => GetCartLineList();
private List<CartLine> GetCartLineList()
{
return new List<CartLine>();
}
public Product FindProductInCartLines(int productId)
{
return Lines.FirstOrDefault(line => line.Product.Id == productId);
}
公共类CartLine
{
public int OrderLineId{get;set;}
公共产品产品{get;set;}
公共整数数量{get;set;}
}
public IEnumerable line=>GetCartLineList();
私有列表GetCartLineList()
{
返回新列表();
}
公共产品FindProductInventLines(int productId)
{
返回Lines.FirstOrDefault(line=>line.Product.Id==productId);
}
//方法返回类型为Product
公共产品FindProductInventLines(int productId){
返回Lines.FirstOrDefault(line=>line.Product.Id==productId);//此行返回CartLine对象;
}
您应该将方法的返回类型更改为CartLine
public CartLine findProductInventLines(int-productId){
返回Lines.FirstOrDefault(line=>line.Product.Id==productId);
}
如果您想退货,请退货
公共产品findProductInventLines(int-productId){
返回行.FirstOrDefault(行=>line.Product.Id==productId)?.Product;
}
当您调用FirstOrDefault()
时,它将返回与源类型相同的对象,在您的情况下,即Lines
,其类型为CartLine
-这就是为什么会出现错误。要从父属性获取子属性,需要在调用中添加对该属性的引用(允许为null)
因此,在您的情况下,您需要:
public Product FindProductInCartLines(int productId)
{
return Lines.FirstOrDefault(line => line.Product.Id == productId)?.Product;
}
如果您不确定?。
运算符,您可以阅读一个很好的解释