【问题标题】:Multidimensional associative array C#多维关联数组 C#
【发布时间】:2016-01-19 09:25:25
【问题描述】:

来自 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# 实现吗?

【问题讨论】:

  • 锯齿状数组可能是一种方式,或者您使用类创建一个类型化的对象结构,它代表了这一点。如果它对我很重要,我总是会创建一个对象结构。

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


【解决方案1】:

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

您可以使用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 以及您需要的所有其他对象。

【讨论】:

    【解决方案2】:

    当你想要动态属性时,尝试像这样使用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。

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 2015-01-21
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2021-02-21
      相关资源
      最近更新 更多