Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 新手:创建enum.FirstOrDefault(),获得一个;无法隐式转换类型";_C#_Lambda_Ienumerator - Fatal编程技术网

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;
}
如果您不确定
?。
运算符,您可以阅读一个很好的解释