我是C#的新手,但我有PHP的背景知识。在C#中使用一些基本的东西我遇到了一些奇怪的事情。我想在C#中创建一个数组数组,其中包含另一个字符串键数组。如果我必须在PHP中执行此操作,它应该是这样的:
$workers = array("John" => array("salary" => 1000, "bonus" => 200),
"Michal" => array("salary" => 1500, "bonus" => 0)
);
深入研究C#我发现了一些像哈希表或字典的答案,但这让我更加困惑。
答案 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));
或者有时您可能希望我们的员工使用dynamic
和anonymous 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