【问题标题】:c# version of a multidimensional arrayc#版本的多维数组
【发布时间】:2017-07-19 23:03:26
【问题描述】:

所以我重做了一个基于浏览器的旧 javascript 游戏并用 c# 重新编码,我真的很喜欢我的代码布局以及工作流程的流畅度,所以我想在用 c# 编码时保持相同的模式

所以我有一些看起来像这样的嵌套数组

var names = {
    town: "",
    mayor: "",
},
  wood = {
    name: "wood",
    amount: 0,
    increment: 0,
    max: 100,
    storage: 0,
    storageCost: {
    wood: 50,
    stone: 50
  }
};

我一直试图找出 c# 的等价物是什么,但没有运气我确定这是他们在 c# 中拥有的东西(为什么他们不会?)

所以是的答案提供了一些文档的链接?或者只是让我知道等价物是什么

请注意,我不是要求你为我编写任何代码,我只需要知道正确的语法

编辑:更准确地说,我希望能够获得像wood.storageCost.stone 这样简单的值并获得50 的值

【问题讨论】:

  • 它是Dictionary<String, Object> 或者你可以创建自定义类
  • @IlyaBursov 字典不会实现我试图做的与多维数组不同的事情
  • javascript中的数组是hashmap,c#中的hashmap被称为字典,你可以用它们实现你想要的一切
  • 您是否有不想为“names”、“wood”和“storageCost”创建类的原因?这对我来说似乎是最简单的答案。

标签: javascript c# arrays multidimensional-array


【解决方案1】:

虽然dynamic 可能是一个解决方案,但我想建议另一种更接近 C# 主要优势之一的方法:静态类型。

因此,为了接近您的主要目标,即通过简单地执行wood.storageCost.stone 来访问一个值,我将创建以下类:

public class Material
{
    public string Name { get; set; }
    public int Amount { get; set; }
    public int Increment { get; set; }
    public int Max { get; set; }
    public int Storage { get; set; }
    public StorageCost StorageCost { get; set; }
}

public class StorageCost
{
    public int Stone { get; set; }
    public int Wood { get; set; }
}

然后,你可以像这样实例化它:

var wood = new Material 
{
    Name = "wood",
    Amount = 0,
    Increment = 0,
    Max = 100,
    Storage = 0,
    StorageCost = new StorageCost
    {
        Stone = 50,
        Wood = 50
    }
};

之后,您可以像这样访问该值:

wood.StorageCost.Stone

一些注意事项:

  • 使用 PascalCase 是由于 C# 的命名准则。更多信息here。如果您愿意,您可以使用小写名称。
  • 虽然我为您的StorageCost 创建了一个类,但我怀疑您可能想要添加和删除存储成本。如果是这样,您可以使用IDictionary&lt;string, int&gt;,但是,要访问该值,您需要执行wood.StorageCost["stone"] 之类的操作。
  • 这种方法的主要优点是您可以进行编译时代码检查,这可以让您更快地避免错误。更多信息here

【讨论】:

    【解决方案2】:

    你可以使用dynamic类型。

    例如:

    dynamic names = new
    {
        town = "",
        mayor = "",
    };
    
    dynamic wood = new
    {
        name = "wood",
        amount = 0,
        increment = 0,
        max = 100,
        storage = 0,
        storageCost = new
        {
            wood = 50,
            stone = 50
        }
    };
    

    【讨论】:

    • 所以理论上我可以打电话给debug.log(wood.storageCost.stone,它会返回50?
    • 有点。 console.log() 的 .NET/C# 等效项是 System.Console.WriteLine()。我不确定 JavaScript 中的 debug.log()
    • debug.log 实际上是我使用的引擎中的一个函数,但我确实试了一下,没有动态定义,但有一个 DynamicGI 定义,它的工作方式似乎与此不一样进口?
    【解决方案3】:

    有人建议使用 dynamic 关键字,但老实说,我会遵循面向对象的方法,这样您就不必重复自己,并且您将在您创建的所有类上获得智能感知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 2010-10-18
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多