将现有列表项添加到另一个列表

时间:2012-10-30 15:52:55

标签: c# list oop

好的,为了解释这一点,我会尝试总结一下我在做什么

在某些时候,我在“供应商”类中创建了一个项目列表。在此示例中,部件列表将添加到主类中存在的供应商列表中。

在某些时候,我想要选择一个特定的部分添加到一个工作(工作类),这个部分已经创建,我只想把这个部分添加到工作中。

使用此部分添加了该部分: '在此之前,供应商已被选中'

Class Supplier
public void AddParts( int PartNum, string PartName, string PartDescription, decimal      Cost, decimal CostWithVAT, decimal Price, short Quantity)
{          
    m_partUsed.Add(new Part(PartNum, PartName, PartDescription, Cost, Price, Quantity));         
}

以下是我打算如何实现这一点:

   private void btnAddJobPart_Click(object sender, EventArgs e)
    {
        //Select the job that the part is to be added too
        string selectedJob = cboJobPartRef.Text;
        List<Job> foundJob = Program.AuspexDo.SelectJob(selectedJob);

        //For the job found
        foreach (Job j in foundJob)
        {
            //Select the supplier
            string selectedSupplier = cboJobSupplier.Text;
            List<Supplier> foundSup = Program.AuspexDo.SelectSupplier(selectedSupplier);

            //For the supplier found, find the part to be added
            foreach (Supplier s in foundSup)
            {
                string selectedPart = cboJobParts.Text;
                List<Part> foundPart = s.SelectPart(selectedPart);

                //Get those part details

                //Add those details to the job

                j.AddParts //the part item here from the supplier list;


            }                   
        }
    }

任何帮助将不胜感激。谢谢。

5 个答案:

答案 0 :(得分:3)

我认为您正在寻找List.AddRange

m_partUsed.AddRange(foundPart)

答案 1 :(得分:1)

方法AddParts创建一个新的Part。我会更改此方法,因此需要一个Part参数,然后将其添加到List。

public void AddParts(Part p)
{          
    m_partUsed.Add(p);         
}

答案 2 :(得分:1)

为什么不将AddParts方法更改为(并将其称为AddPart,因为它一次只添加一个部分):

public void AddPart(Part part)
{          
    m_partUsed.Add(part);         
}

然后,您可以使用

添加部件
j.AddPart(somePart);

或使用对象初始值设定项

j.AddPart(new Part{Num=PartNum, Name=PartName, Description=PartDescription,
                   Cost=Cost, Price=Price, Quantity=Quantity});

或使用构造函数

j.AddPart(new Part(PartNum, PartName, PartDescription,
                   Cost, Price, Quantity));

如果您希望保留原始实现,则可以并排使用两种AddPart方法。这称为方法重载。然后,您可以选择添加零件对象或单个零件值。

public void AddPart(Part part) { ... }
public void AddPart(int PartNum, string PartName,
                    string PartDescription, decimal Cost,
                    decimal CostWithVAT, decimal Price, short Quantity) { ... }

只要参数列表不同,您可以拥有任意多个具有相同名称的方法。参数数量必须不同或参数类型必须不同。不考虑参数名称。

答案 3 :(得分:1)

您还可以执行以下操作:

j.AddParts(foundSup.SelectMany(s => s.SelectPart(selectedPart)))

虽然AddParts看起来像阿列克谢回答。

答案 4 :(得分:1)

如果我正确理解OP,他想将列表添加到列表中,......

我不知道C#,但我知道Unity C#

我很快为你做到了:

using UnityEngine;
using System.Collections;
using System.Collections.Generic; // THIS one is very important since it contains the List

public class TestScript : MonoBehaviour {
    List<int> ListOfIntegers = new List<int>();
    List<int> ListOfIntegers1 = new List<int>();
    List<List<int>> ListOfLists = new List<List<int>>();


    void Start(){
        ListOfIntegers.Add(1);
        ListOfIntegers1.Add(10);
        ListOfLists.Add(ListOfIntegers1);
        ListOfLists.Add(ListOfIntegers);
        Debug.Log((ListOfLists[0])[0]); // you get debug 10
    }
}

所有它正确读取我检查;)

我希望这很有用。非Unity C#