在列表<>中存储值并改变它们

时间:2014-11-28 12:37:23

标签: c# list struct

我一直在尝试创建一个程序,允许用户编辑诸如提供存储在程序中的基值的mp3播放器的供应:

public struct MP3_Players
{
    public int ID { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public int MBsize { get; set; }
    public decimal Price { get; set; }
    public int Supply { get; set; }
}

MP3_Players player1 = new MP3_Players
{
    ID = 1,
    Make = "GET Technologies .inc",
    Model = "HF 410",
    MBsize = 4096,
    Price = 129.95m,
    Supply = 500
};
MP3_Players player2 = new MP3_Players
{
    ID = 2,
    Make = "Microsoft",
    Model = "SOFT1",
    MBsize = 1028,
    Price = 432.99m,
    Supply = 500
};
MP3_Players player3 = new MP3_Players
{
    ID = 3,
    Make = "PEAR",
    Model = "APPLE3",
    MBsize = 2056,
    Price = 130.00m,
    Supply = 500
};
MP3_Players player4 = new MP3_Players
{
    ID = 4,
    Make = "logitech",
    Model = "DEF0",
    MBsize = 2056,
    Price = 53.35m,
    Supply = 500
};
MP3_Players player5 = new MP3_Players
{
    ID = 5,
    Make = "Sennheiser",
    Model = "HEIS1",
    MBsize = 2056,
    Price = 399.95m,
    Supply = 500
};

现在制作带有列表的方法并不是一个问题,我想它如下:

public static void mutate()
{
    List<MP3_Players> PlayerList = new List<MP3_Players>;
    Playerlist.Add(player1);
    Playerlist.Add(player2);
    Playerlist.Add(player3);
    Playerlist.Add(player4);
    Playerlist.Add(player5);
}

我的第一个问题只是改进代码的问题,但我想很多读这篇文章的人都会理解我遇到的问题,主要是说player1不是静态的,这是否意味着我必须单独制作每个玩家静态或有更简单的方法吗?

然而,主要问题在于我尝试创建一个小程序来更改供应,这个想法是让用户输入一个ID,然后允许他们编辑供应,这对我来说非常适合我使用数组,但我在理解如何使用list<>中的数据并更改它时遇到问题(基本上尝试从其他方法中获取存储在列表中的值)。

5 个答案:

答案 0 :(得分:1)

更简单的方法是按

初始化列表
List<MP3_Players> PlayerList = new MP3Players[]{
    new MP3_Players()
    {
        ID = 1,
        Make = "GET Technologies .inc",
        Model = "HF 410",
        MBsize = 4096,
        Price = 129.95m,
        Supply = 500
    }, <-- include more instances of MP3_Players here
}.ToList();

此外,索引器[]可用于访问列表中与数组非常相似的元素。

答案 1 :(得分:0)

要解决“列表问题”,您可以使用类和字典:

public class MP3_Players
{
    /* ... */
}

public static void mutate()
{
    var PlayerList = new Dictionary<int, MP3_Players>;
    PlayerList.Add(player1.ID, player1);
    PlayerList.Add(player2.ID, player2);
    PlayerList.Add(player3.ID, player3);
    PlayerList.Add(player4.ID, player4);
    PlayerList.Add(player5.ID, player5);
}

然后您可以通过他们的ID访问它们并更改它们:

var player = PlayerList[ID];
player.Supply--;
player.Price -= 10;

但是要解决更大的“持久性”问题,您应该考虑使用“数据存储”来保存数据,例如:实体框架和数据库。

答案 2 :(得分:0)

您是否考虑使用集合初始值设定项来内联PlayerList的创建?

在涉及静态的情况下,静态方法无法访问非静态实例成员。

答案 3 :(得分:0)

一种方法是像其他用户解释一样创建字典,如果玩家的ID是唯一,如果他们不是没有开始这种方法。这是字典的要求!

使用List的另一种方式。

List<MP3_Players> newList = PlayerList.FindAll(x=>x.Model == Apple3);
newList.ToList().ForEach(x => x.Storage = 30);

这将返回每个具有Apple3型号的玩家,第二行将更改存储的所有值。

答案 4 :(得分:0)

在C#中,结构是不可变的。这意味着它们无法编辑。如果您希望对某个项目进行更改,则需要将其替换为全新的项目。您可以通过使用类来避免这种情况。

我在枚举中编辑集合遇到的一个问题是集合已被修改,枚举无法再继续。发生这种情况是因为我使用了一个foreach循环来评估集合中的每个项目。我通过使用for循环并使用其索引从列表中获取元素并在那里执行我的编辑来避免它。