多维关联数组c#

时间:2016-01-19 09:25:25

标签: c# asp.net multidimensional-array associative-array

来自PHP背景我可以在PHP中执行此操作:

$array[sales_details][uid] = 1;
$array[sales_details][name] = "Name Surname";
$array[sales_details][sales][France][Paris] = 50;
$array[sales_details][sales][France][Lyon] = 25;
$array[sales_details][sales][UK][London] = 75;
$array[sales_details][sales][German][Berlin] = 23;

我怎样才能在C#中做到这一点。我试着看着字典。但即使我将值键定义为对象,它也不会接受"销售"阵列。

var dict = new Dictionary<string, object>();
dict["uid"] = 1;
dict["sales"]["France"]["Paris"] = 50; //error kicks in here

这是否可以用c#

2 个答案:

答案 0 :(得分:2)

在我看来,你试图将很多的信息放在数组中,实际上必须是一个对象。

您可以使用jagged arrays解决此问题,但对象更好。

创建一个这样的类:

public class SalesDetails
{
    public string Uid {get;set;}
    public string Name {get;set;}

    public List<SalesItem> SalesItems {get;set;} = new List<SalesItem>();
}

然后自己制定SalesItemCity以及所需的所有其他对象。

答案 1 :(得分:0)

如果需要动态属性,请尝试使用ExpandoObject类,如下所示:

dynamic salesDetails = new ExpandoObject();
salesDetails.Uid = 10;

salesDetails.Sales = new ExpandoObject();

salesDetails.Sales.France = new ExpandoObject();
salesDetails.Sales.France.Paris = 50;
salesDetails.Sales.France.Lyon = 25;

salesDetails.Sales.UK = new ExpandoObject();
salesDetails.Sales.UK.London = 75;

salesDetails.Sales.Germany = new ExpandoObject();
salesDetails.Sales.Germany.Berlin = 23;

dynamic london = salesDetails.Sales.UK.London;

重要的是,您必须将内部属性初始化为ExpandoObject。