c#中包含字符串键的数组数组

时间:2015-10-26 11:33:19

标签: c# arrays

我是C#的新手,但我有PHP的背景知识。在C#中使用一些基本的东西我遇到了一些奇怪的事情。我想在C#中创建一个数组数组,其中包含另一个字符串键数组。如果我必须在PHP中执行此操作,它应该是这样的:

$workers = array("John" => array("salary" => 1000, "bonus" => 200), 
                 "Michal" => array("salary" => 1500, "bonus" => 0)
           );

深入研究C#我发现了一些像哈希表或字典的答案,但这让我更加困惑。

4 个答案:

答案 0 :(得分:3)

C#与PHP不同之处在于它没有松散,所以你需要准确地声明数组(如果你想要字符串键的哈希表)可以容纳。这意味着如果您希望拥有一个数组数组,那么需要告诉父数组它包含数组并且不能保存任何其他内容。

这里已基本回答:

How to initialize a dictionary containing lists of dictionaries?

答案 1 :(得分:2)

.NET中的数组没有键值对,因此您需要使用不同的集合,就像字典一样。

最接近您的PHP代码的是字典词典,但是自定义类的字典更适合在C#中处理数据的方式。

班级:

public class Worker {
  public int Salary { get; set; }
  public int Bonus { get; set; }
}

字典:

Dictionary<string, Worker> workers = new Dictionary<string, Worker>();
workers.Add("John", new Worker{ Salary = 1000, Bonus = 200 });
workers.Add("Michal", new Worker{ Salary = 1500, Bonus = 0 });

这允许您按名称查找工作程序,然后访问属性。例如:

string name = "John";
Worker w = workers[name];
int salary = w.Salary;
int bonus = w.Bonus;

答案 2 :(得分:1)

为对象Worker创建一个类:

public class Worker
{
    public string Name { get; set; }
    public double Salary { get; set; }
    public int Bonus { get; set; }

    public Worker(string name, double salary, int bonus)
    {
        this.Name = name;
        this.Salary = salary;
        this.Bonus = bonus;
    }
}

然后创建一个工人列表:

List<Worker> workers = new List<Worker>() { 
    new Worker("John", 1000, 200),
    new Worker("Michal", 1500, 0)
};

答案 3 :(得分:0)

你在c#中可以做的是这样的:

public class Employee
{
    public string Name { get; set; }
    public double Salary { get; set; }
    public int Bonus { get; set; }

    public Employee(string name, double salary, int bonus)
    {
        this.Name = name;
        this.Bonus = bonus;
        this.Salary = salary;
    }
}

创建字典:

Dictionary<string, Employee> emps = new Dictionary<string, Employee>();
emps.Add("Michal", new Employee("Michal", 1500, 0));
emps.Add("John", new Employee("John", 1000, 200));

或者有时您可能希望我们的员工使用dynamicanonymous type而不是强类型(例如Employee):

        var John = new { Salary = 1000, Bonus = 200 };
        var Michal = new { Salary = 1500, Bonus = 0 };

        var dict = new Dictionary<string, dynamic>()
        {
            {"John", John},
            {"Michal", Michal},
        };

        Console.WriteLine(dict["John"].Bonus);

输出:200