2014-09-24 69 views
-2

当我从类FamilyList填充列表时出现错误但是:如果我从Main方法填充,程序工作正常。所有的如何在主要方法外填充列表中的项目?

using System; 
using System.Collections.Generic; 

namespace ListClassInstance74 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<Family> fami = new List<Family>(); 

     //populate list 
     fami.Add(new Family() { name = "Ganpati Prasad", sex = "M", age = 52, occupation = "Under Manager" }); 
     fami.Add(new Family() { name = "Manju Devi", sex = "F", age = 49, occupation = "Housewife" }); 
     fami.Add(new Family() { name = "Anil Kumar", sex = "M", age = 27, occupation = "Entrepreneur" }); 
     fami.Add(new Family() { name = "Sunil Kumar", sex = "M", age = 25, occupation = "Project Executive" }); 

     //retrieve from list 
     Family.DisplaySameSex(fami); 
    } 
} 

public class Family 
{ 
    public string name { set; get; } 
    public string sex { set; get; } 
    public int age { set; get; } 
    public string occupation { set; get; } 

    public static void DisplaySameSex(List<Family> sSex) 
    { 
     foreach(Family f in sSex) 
     { 
      if (f.sex == "F") 
       Console.WriteLine("Female: " + f.name + " " + f.sex + " " + f.age + " " + f.occupation); 

      if (f.age < 30) 
       Console.WriteLine("Child: " + f.name + " " + f.sex + " " + f.age + " " + f.occupation); 
     } 
    } 
} 

class FamilyList 
{ 
    //Family slim = new Family(); 
    ////declare list 
    //List<Family> fami = new List<Family>(); 

    ////populate list 
    //fami.Add(new Family(){name = "Ganpati Prasad", snnnsex = "M", slim.age = 52, slim.occupation = "Under Manager"}); 
} 
} 
+0

你得到了错误becoz你不能直接初始化在我们的类的对象。你可以在构造函数里面或者在方法 – DineshKumar 2014-09-24 11:11:33

回答

0
public class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Family> fami = Family.FamilyList(); 
     //retrieve from list 
     Family.DisplaySameSex(fami); 
    } 
} 



public class Family 
{ 
    public string name { set; get; } 
    public string sex { set; get; } 
    public int age { set; get; } 
    public string occupation { set; get; } 

    public static void DisplaySameSex(List<Family> sSex) 
    { 
     foreach (Family f in sSex) 
     { 
      if (f.sex == "F") 
       Console.WriteLine("Female: " + f.name + " " + f.sex + " " + f.age + " " + f.occupation); 

      if (f.age < 30) 
       Console.WriteLine("Child: " + f.name + " " + f.sex + " " + f.age + " " + f.occupation); 
     } 
    } 
    public static List<Family> FamilyList() 
    { 
     List<Family> fami = new List<Family>(); 

     ////populate list 
     fami.Add(new Family(){name = "Ganpati Prasad", sex = "M",age = 52, occupation = "Under Manager"}); 

     return fami; 
    } 
} 
1

首先,你需要把你的代码放到一个构造函数:

class FamilyList 
{ 
    List<Family> fami = new List<Family>(); 

    public FamilyList() 
    { 
     fami.Add(new Family(){name = "Ganpati Prasad", snnnsex = "M", slim.age = 52, slim.occupation = "Under Manager"}); 
    } 
} 

其次,你的FamilyList可以实现List<T>,使生活更轻松。内部列表不可用的Main方法,因为它隐藏:

class FamilyList : List<Family> 
{ 
    public FamilyList() 
    { 
     this.Add(new Family(){name = "Ganpati Prasad", snnnsex = "M", slim.age = 52, slim.occupation = "Under Manager"}); 
    } 
} 

或做访问列表:

class FamilyList 
{ 
    public List<Family> Families {get; private set;} 

    public FamilyList() 
    { 
     this.Families = new List<Family>(); 
     this.Families.Add(new Family(){name = "Ganpati Prasad", snnnsex = "M", slim.age = 52, slim.occupation = "Under Manager"}); 
    } 
} 

第三,你应该在你Main创建列表的一个实例方法并传递到方法:

static void Main(string[] args) 
{ 
    FamilyList list = new FamilyList(); 

    Family.DisplaySameSex(list); 

    // Or this when using the property `Families`: 
    //Family.DisplaySameSex(list.Families); 
} 
+1

IMO中初始化,因为你封装了一个并不是最好的想法,所以继承了一个'List '。 [*为什么不从'List '*继承](http://stackoverflow.com/questions/21692193/why-not-inherit-from-listt) – 2014-09-24 11:11:45

+0

但是你没有扩展'List '。您只是创建一个类型特定的列表。 – 2014-09-24 11:13:27

+1

@YuvalItzchakov:我也加了一个成员实现。 – 2014-09-24 11:14:45

0
namespace ListClassInstance2_74 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //call FamilyList to create List 
      List<Family> fami = CreateList.FamilyList(); 
      Family.DisplaySameSex(fami); 
     } 
    } 

public class Family 
{ 
    public string name { set; get; } 
    public string sex { set; get; } 
    public int age { set; get; } 
    public string occupation { set; get; } 

    //retrieve info from list 
    public static void DisplaySameSex(List<Family> sSex) 
    { 
     foreach (Family f in sSex) 
     { 
      if (f.sex == "F") 
       Console.WriteLine("Female: " + f.name + " " + f.sex + " " + f.age + " " + f.occupation); 

      if (f.age < 30) 
       Console.WriteLine("Child: " + f.name + " " + f.sex + " " + f.age + " " + f.occupation); 
     } 
    } 
} 

public class CreateList 
{ 
    public static List<Family> FamilyList() 
    { 
     List<Family> fami = new List<Family>(); 

     //populate list 
     fami.Add(new Family() { name = "Ganpati Prasad", sex = "M", age = 52, occupation = "Under Manager" }); 
     fami.Add(new Family() { name = "Manju Devi", sex = "F", age = 49, occupation = "Housewife" }); 
     fami.Add(new Family() { name = "Anil Kumar", sex = "M", age = 27, occupation = "Entrepreneur" }); 
     fami.Add(new Family() { name = "Sunil Kumar", sex = "M", age = 25, occupation = "Project Executive" }); 

     return fami; 
    } 
} 

}