使用静态属性打印实例数据

Eas*_*asy 0 c#

我写了一些类列表,这是我用来初始化类的代码

  public class Album
   {
       static public int IDNumber { get; set; }
       static public string AlbumName { get; set; }
       static public string Artist { get; set; }
       static public int ReleaseDate { get; set; }
       static public int TrackAmount { get; set; }
       static public string Location { get; set; }
       static public int Rating { get; set; }

       public Album(int _id, string _name, string _artist, int _releasedate, int _trackamount, string _location, int _rating)
       {
           IDNumber = _id;
           AlbumName = _name;
           Artist = _artist;
           ReleaseDate = _releasedate;
           TrackAmount = _trackamount;
           Location = _location;
           Rating = _rating;
       }
   }
Run Code Online (Sandbox Code Playgroud)

我从控制台添加所有内容:

   static private List<Album> AlbumsList = new List<Album>();
   public void addnew()
   { 
       //getting from console to separate variables with names below in .add method
       AlbumsList.Add(new Album(ID, AlbNm, Art, RelD, TrAmn, Loc, Rat));  
       currid++;
   }
Run Code Online (Sandbox Code Playgroud)

我还添加了打印代码:

   static public void printlist(List<Album>AlbumsList)
   {
       foreach (Album IDNumber in AlbumsList)
       {
           Console.WriteLine(Album.IDNumber + Album.AlbumName + Album.Artist + Album.ReleaseDate + Album.TrackAmount + Album.Location + Album.Rating);
       }
   }
Run Code Online (Sandbox Code Playgroud)

不幸的是,它显示了最后一张"专辑",就像我拥有的​​不同专辑一样多.谁能帮我?

Jon*_*eet 5

您的所有属性都是静态的 - 这意味着它们与类型相关,而不是与该类型的任何一个实例相关.(并不是值"被所有实例共享" - 它们与任何实例完全无关.)

您应该将它们设为实例属性,只需删除static修饰符即可.然后,您foreach还需要更改循环.请注意,在当前foreach循环中,您是如何完全忽略循环变量(IDNumber)的?这暗示了一些错误.试试这个:

// Variable and method names changed to be more readable and conventional.
// Modifier order also changed for convention.
public static void PrintList(List<Album> albums)
{
    foreach (Album album in albums)
    {
        Console.WriteLine(album.IDNumber + album.AlbumName + album.Artist + 
                          album.ReleaseDate + album.TrackAmount + album.Location + 
                          album.Rating);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者更愉快的是:

static public void PrintList(List<Album> albums)
{
    foreach (Album album in albums)
    {
        Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}",
                          album.IDNumber, album.AlbumName, album.Artist,
                          album.ReleaseDate, album.TrackAmount, album.Location,
                          album.Rating);
    }
}
Run Code Online (Sandbox Code Playgroud)