什么是键/值对Javascript数组的C#等价物

什么是键/值对Javascript数组的C#等价物,javascript,c#,Javascript,C#,这在javascript中表示什么: [["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9]] 其次,C#等价物是什么 数组的数组??但是每个内部数组本质上是一个键/值对,所以这是不对的 如何在C#中生成这个JS对象 这在javascript中表示什么: [["January", 10], ["February", 8], ["March", 4], ["April", 1

这在javascript中表示什么:

[["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9]]
其次,C#等价物是什么

数组的数组??但是每个内部数组本质上是一个键/值对,所以这是不对的

如何在C#中生成这个JS对象

这在javascript中表示什么:

[["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9]]
它可以是地图:

let m = new Map([["February", 8], ["March", 4], ["April", 13]])
或者只是数组的数组:

let a = [["February", 8], ["March", 4], ["April", 13]];
其次,C#等价物是什么


它可以是
字典
或数组数组

在Javascript中,它是一个数组数组:

由于C#是一种强类型语言,因此不建议以当前形式表示此数据,这是非传统的,但正如ErikPhillips在下面的评论中所说,您可以这样做:

object[] array1 = { "February", 8 };
由于“外部”数组是两种类型的数组,string和int,因此更传统的强类型C#最佳做法是在下面的C#代码中创建每个月日数组元素的“模型”,因为C#数组更常见于一种类型的数组,例如string数组或int数组或下面的代码中,传统的强类型C#MonthDay模型数组:

public class TestClass {

    public TestClass(){
        MonthDayModel[] arr = new MonthDayModel[10];
        arr[0] = new MonthDayModel() {
            Month = "February",
            Day = 8
        };
        arr[1] = new MonthDayModel() {
            Month = "March",
            Day = 4
        };
        //...
    }
}

public class MonthDayModel {
    public string Month { get; set; }
    public int Day { get; set; }
}

它的
字典

Syntax: Dictionary<TKey, TValue>

var myDictionary = new Dictionary<int, string>();
myDictionary.Add(10, "January");
myDictionary.Add(8, "February");
myDictionary.Add(4, "March");
myDictionary.Add(13, "April");
myDictionary.Add(17, "May");
    myDictionary.Add(17, "May");
    myDictionary.Add(17, "May"); //ERROR
那么
列表
字典
之间有什么区别呢

答案是列表不强制密钥的唯一性

这意味着您可以使用
列表
KeyValuePair
执行此操作

//Record with same key
new KeyValuePair<string, int>("May", 17),
new KeyValuePair<string, int>("May", 17),

如果它是一个映射,那么在C#中高效查找的等价物就是一个
字典

您甚至可以这样命名元组的成员:

var months = new (string Name, int Number)[]
{
    ("January", 1), ("February", 2), ("March", 3),
    ("April", 4), ("May", 5), ("June", 6)
};

Console.WriteLine(months[0].Name);
这在javascript中表示什么:

[["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9]]
[]
表示一个数组。因此,外部部分是一个数组。由于每个数组元素也由
[]
分隔,因此每个元素也是一个数组

其次,C#等价物是什么

实际上,你不能给任何东西赋值,这会导致编译时错误。如果您使用Json.Net之类的东西将其转换为c#对象,那么绝对最接近的东西(外部->内部)将是一个


通常情况下,交错阵列并没有那么有用。在这种情况下,我的意见是将数组转换成一个
列表
,因为列表更容易使用,而且每个数组元素似乎都包含一个月和一天,这更容易作为DateTime对象使用。

在什么上下文中等效?您是否希望使用它来查找值,就像在JavaScript中将其传递给
Map
构造函数时一样?你想要一个元组列表吗?(.NET有元组。)好的,答案是“字符串列表列表”。然而,由于各种原因(类型安全、无唯一性约束等),下面的所有答案都比该答案更有意义。这个“东西”在“Flot”Javascript绘图库中使用,它需要这种格式才能正常工作。因此,需要对c#WebAPI控制器进行ajax调用,并将数据转换为字符串列表。奇怪……不管怎样,我想只要投票选出每个答案,然后选出最好的——我能做到的最好的。感谢大家抽出时间。字符串列表不适合生成此JavaScript值–您将得到
[“一月”,“10”]
而不是
[“一月”,“10”]
。您正在生成JSON吗?你用JSON序列化程序尝试过元组吗(哪一个)?事实上,由于c#是强类型的,除非你也将数字转换成字符串,否则它不能是锯齿数组…@ZoharPeled:
object[]
或字符串和int的字典,或sting和int的元组数组或。。。(还有更多选项…
object[]array1={“二月”,8}。您不能用C#表示此数据的语句完全错误。@ErikPhilips ok You got me:)我想说您可以这样做,但这通常不是一个好做法。这基本上是正确的,但我认为对列表元素使用
KeyValuePair
类型不是一个好主意。
var months = new (string Name, int Number)[]
{
    ("January", 1), ("February", 2), ("March", 3),
    ("April", 4), ("May", 5), ("June", 6)
};

Console.WriteLine(months[0].Name);
[["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9]]
object[][]