【问题标题】:How to add a List to a List如何将列表添加到列表
【发布时间】:2015-03-05 08:15:49
【问题描述】:

我有一个由动物类型组成的动物列表,每只动物都有一个访问列表,其中每次访问治疗时都会添加信息。 不知何故,我无法弄清楚如何将访问列表添加到动物列表 animalList.Add(listHealth) ?????不工作

List <Animal> animalList = new List <Animal>{typeOfAnimal = "Cat"};
DetailsOfAnimal da;

public class Animal
{
   public string typeOfAnimal;
   List <HealthList> listHealth = new List <HealthList>
}

public class HealthList
{
  public Date visit {get;set;}
  public string symptoms  {get;set;}
 }

.......
if new animal 
animalList = new List <Animal>;
// Add details to animal
da = new HealthList{visit = "2005-03-05", symptoms = "bad stomach"}
  List <HealthList> listHealth = new List <HealthList>
listHealth .Add(da);

animalList.Add(listHealth)   ???? Not working how to do that

【问题讨论】:

  • 您想将listHealth 添加到哪个Animal
  • listHealth.Add(new Animal() {typeOfAnimal="Cat", listHealth =da });
  • 据我所知,animalList 只能包含 Animal 项目,而 HealthList 不是 Animal 这就是为什么你可以添加这些项目(通过AddRange)到列表直接。
  • 顺便说一句。 HealthList 这个名字有点误导人。它不是在描述一个列表。它描述了一个列表中的项目inHealth 也可能具有误导性,或者至少过于难以描述。也许VisitTreatment 会是更好的名称。至于代码风格,我通常希望类的公共成员是大写的驼峰式(TypeOfAnimal 而不是typeOfAnimal);但也许您的内部指导方针需要一些不同的东西。
  • 为什么typeOfAnimallistHealth 字段在Animal 上?它们应该是属性(带有 getter/setter)。

标签: c# list c#-4.0 multidimensional-array


【解决方案1】:
class Program
{
    private static List<Animal> animalList = new List<Animal>();

    static void Main(string[] args)
    {
        Animal animal = new Animal() { TypeOfAnimal = "Dog" };
        // created a new animal

        animal.HealthList.Add(new Health() 
                              { 
                                  Visit = new DateTime(2014, 03, 05),
                                  Symptoms = "Herby is permanantly scratching his nose" 
                              });
        // added a new instance of Health to its HealthList
        // if you allready have a List<Health> the you can call
        // animal.HealthList.AddRange(theList); 
        // works as well with any other IEnumerable<Health>
        animalList.Add(animal);
    }
}

public class Animal
{
    private List<Health> healthList = new List<Health>(); 
    // the default accessmodifier for a classmember is private
    // you can write it too so you better understand what's going on

    public string TypeOfAnimal { get; set; }

    public List<Health> HealthList { get { return healthList; } }
    // add a readonly property for the list so you can access it from outside the class
}

public class Health 
// change this name for "HealthList" is missleading you
// because it would imply that it is a collection
{
    public DateTime Visit { get; set; }
    public string Symptoms { get; set; }
}

【讨论】:

  • 您可能希望将“TypeOfAnimal”的类型更改为包含所有动物类型的枚举
  • (讽刺)一个封闭的动物名单是最好的,所以当有人决定对他的翼手龙进行健康检查时,他发现他不能,他将不得不付钱给你修改你的程序:)
【解决方案2】:
Animal animal = new Animal();
animal.typeOfAnimal = "Cat";

da = new HealthList{visit = "2005-03-05", symptoms = "bad stomach"}
animal.listHealth.Add(da); // animal already has a non-null List<HealthList>

animalList.Add(animal);

您正在颠倒操作的顺序...最好先创建Animal(已经包含listHealth),然后填充listHealth。您可以在末尾或紧跟在new Animal() 之后animalList.Add。没有区别。

这是错误的:

List<Animal> animalList = new List <Animal>{typeOfAnimal = "Cat"};

应该是

List<Animal> animalList = new List<Animal>();

List<Animal> animalList = new List<Animal> { new Animal { typeOfAnimal = "Cat" } };

【讨论】:

    【解决方案3】:

    可以将一个列表添加到另一个列表:

        list1.AddRange(list2);
    

    另见:https://msdn.microsoft.com/en-us/library/z883w3dc%28v=vs.110%29.aspx

    您不能将不同类型的列表添加到另一个列表中。

    在您的情况下,animalList 是通用类型 Animal,您正在尝试向其中添加整个 List。

    【讨论】:

    • HealthList 不是Animal 的子类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2017-07-14
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多