如何将多个键值对添加到字典数组(或类似的解决方案)中?

时间:2019-07-08 13:04:06

标签: c# dictionary

当所有字典都具有相同的键值对(只有值不同)时,我正在寻找一种更干净的方式用C#(或替代方法)编写字典数组。

我需要创建3个电厂对象,并且所有3个对象的属性“ Dam”,“ Diversion”和“ First”都需要具有不同的值,并且稍后将在此属性中使用不同的值码。我在用C#编写代码方面还很陌生,所以当我寻找解决此问题的最佳方法时,我遇到了各种字典,并决定将其用于其中。到目前为止,我已经在Program类中创建了3个词典的数组,然后在Main方法中添加了所需的值。

static Dictionary<string, int>[] power_plant = new Dictionary<string, int>[]
         {
            new Dictionary<string, int>(),
            new Dictionary<string, int>(),
            new Dictionary<string, int>()
         };

for (int i = 0; i < 3; i++) 
{
   if (i == 0)
   {
      power_plant[i].Add("Dam", 1);
      power_plant[i].Add("Diversion", 0);
      power_plant[i].Add("First", 1);
   }
   else if (i==1)
   {
      power_plant[i].Add("Dam", 1);
      power_plant[i].Add("Diversion", 0);
      power_plant[i].Add("First", 0);
   }
   else
   {
      power_plant[i].Add("Dam", 0);
      power_plant[i].Add("Diversion", 1);
      power_plant[i].Add("First", 0);
   }
}

尽管代码可以正常工作,但我认为必须使用更好的方法来实现所需的功能,无论是使用字典还是使用完全不同的类型的更简洁的代码。但是,我没有所需的知识来考虑替代方案。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

欢迎来到C#世界!我不确定您要实现什么目标,但是似乎您已经使工作复杂化了。检查一下:

  

我需要创建3个电厂对象,并且所有3个对象的属性“ Dam”,“ Diversion”和“ First”都必须具有不同的值

在这种情况下,创建一个PowerPlant类:

public class PowerPlant
{
    public PowerPlant(int dam, int diversion, int first)
    {
        Dam = dam;
        Diversion = diversion;
        First = first;
    }

    public int Dam { get; }
    public int Diversion { get; }
    public int First { get; }
}

然后将其添加到列表中:

var PowerPlants = new List<PowerPlant>
{
    new PowerPlant(1, 0, 1),
    new PowerPlant(1, 0, 0),
    new PowerPlant(0, 1, 0)
};

这对您有帮助吗?让我知道是否可以。

答案 1 :(得分:1)

我认为最好创建具有​​3个属性Dam,Diversion和First的PowerPlant类。

public class PowerPlant
{
    public int Dam { get; set; }
    public int Diversion { get; set; }
    public int First { get; set; }
}

并创建对象列表

static List<PowerPlant> powerPlants = new List<PowerPlant>
{
    new PowerPlant { Dam = 1, Diversion = 0, First = 1},
    new PowerPlant { Dam = 1, Diversion = 0, First = 0},
    new PowerPlant { Dam = 0, Diversion = 1, First = 0}
};

然后,您可以使用linq选择所需的数据。

您要如何处理数据?