我写了一些类列表,这是我用来初始化类的代码
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)
不幸的是,它显示了最后一张"专辑",就像我拥有的不同专辑一样多.谁能帮我?
您的所有属性都是静态的 - 这意味着它们与类型相关,而不是与该类型的任何一个实例相关.(并不是值"被所有实例共享" - 它们与任何实例完全无关.)
您应该将它们设为实例属性,只需删除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)