C# 如何搜索BindingList并返回对象?

C# 如何搜索BindingList并返回对象?,c#,C#,我正在为学校做一个项目,它必须遵循特定的UML图。他们希望代码返回给定Int(associatedPartID)的对象(Part) 我曾尝试使用foreach循环,但一直遇到并非所有代码路径都返回值的问题。有没有办法修改它使其工作 private BindingList<Part> associatedPart; private int ProductID; private string Name; private decimal Price;

我正在为学校做一个项目,它必须遵循特定的UML图。他们希望代码返回给定Int(associatedPartID)的对象(Part)

我曾尝试使用foreach循环,但一直遇到并非所有代码路径都返回值的问题。有没有办法修改它使其工作

    private BindingList<Part> associatedPart;
    private int ProductID;
    private string Name;
    private decimal Price;
    private int InStock;
    private int Min;
    private int Max;

    //getters

    public int getProductID()
    {
        return this.ProductID;
    }

    public string getName()
    {
        return this.Name;
    }

    public decimal getPrice()
    {
        return this.Price;
    }

    public int getInStock()
    {
        return this.InStock;
    }

    public int getMin()
    {
        return this.Min;
    }

    public int getMax()
    {
        return this.Max;
    }

    //setters
    public void setProductID(int productID)
    {
        this.ProductID = productID;
    }

    public void setName(string name)
    {
        this.Name = name;
    }

    public void setPrice(decimal price)
    {
        this.Price = price;
    }

    public void setInStock(int instock)
    {
        this.InStock = instock;
    }

    public void setMin(int min)
    {
        this.Min = min;
    }

    public void setMax(int max)
    {
        this.Max = max;
    }

    //methods

    public void addAssociatedPart(Part newAssociatedPart)
    {
        associatedPart.Add(newAssociatedPart);
    }

    public bool removeAssociatedPart(int associatedPartID)
    {

        foreach(Part part in associatedPart)
        {
            if (associatedPartID == part.getPartId())
            {
                associatedPart.Remove(part);
            }
            else
            {
                continue;
            }
        }
        return true;
    }

    public Part lookupAssociatedPart(int associatedPartID)
    {
        foreach(Part part in associatedPart)
        {
            if (associatedPartID == part.getPartId())
            {
                return part;
            }
            else
            {
                continue;
            }
        }
    }
私有绑定列表关联部分;
私有int-ProductID;
私有字符串名称;
私人十进制价格;
私人int InStock;
私用int Min;
私人int Max;
//吸气剂
public int getProductID()
{
返回此.ProductID;
}
公共字符串getName()
{
返回此.Name;
}
公共价格()
{
退回这个。价格;
}
公共int getInStock()
{
把这个还给我;
}
公共int getMin()
{
返回这个.Min;
}
公共int getMax()
{
返回这个.Max;
}
//二传手
public void setProductID(int productID)
{
this.ProductID=ProductID;
}
公共void集合名(字符串名)
{
this.Name=Name;
}
公共定价(十进制价格)
{
这个。价格=价格;
}
公共无效集合集合(内部集合)
{
this.InStock=InStock;
}
公共无效设置最小值(整数最小值)
{
这个.Min=Min;
}
公共void setMax(int max)
{
这个。Max=Max;
}
//方法
public void addAssociatedPart(Part newAssociatedPart)
{
associatedPart.Add(新建associatedPart);
}
公共布尔删除关联部分(int关联部分)
{
foreach(关联部件中的部件)
{
如果(associatedPartID==part.getPartId())
{
关联部件。移除(部件);
}
其他的
{
持续
}
}
返回true;
}
公共部件查找关联部件(int关联部件ID)
{
foreach(关联部件中的部件)
{
如果(associatedPartID==part.getPartId())
{
返回部分;
}
其他的
{
持续
}
}
}

简言之,程序将获取一个associatedPartId并返回该id的整个部分,该id位于BindingList中。方法是lookupAssociatedPart(int associatedPartID)

并非lookupAssociatedPart函数的所有部分都返回值。代码的简单版本是

 public Part lookupAssociatedPart(int associatedPartID)
    {
        return associatedPart.Where( a => a.getPartId() == associatedPartID).FirstOrDefault();
    }

错误消息几乎描述了您的问题,您错过了返回。这里的具体问题是,在
foreach
循环之外,根本没有
返回。那么,如果您请求一个不存在的ID,会发生什么?它会返回什么?这就是编译器所抱怨的

我的猜测是,在这里返回
null
就足够了(表示未找到任何零件),因此我将以以下方式修改该方法:

public Part lookupAssociatedPart(int associatedPartID)
{
    foreach(Part part in associatedPart)
    {
        if (associatedPartID == part.getPartId())
        {
            return part;
        }
        //else block omited since it doesn't do anything. continue is implicit at the end of a loop
    }

    //Here we return the value if no part is found
    return null;
}

我在Microsoft.docs上找到了它,并将其应用到我的项目中 我刚刚替换了对象:

publicstaticpartlookuppart(int-foundPartIndex)
{ 
for(int i=0;i
增量
i++
返回datagridview中可用的所有分区

C#不是Java。不要编写getter和setter。编写属性。