将代码从 JavaScript 转换为 C#

本文关键字:转换 JavaScript 代码 | 更新日期: 2023-09-27 18:37:04

请帮助我。

我有一个JavaScript代码。

var regiondb = new Object()
regiondb["africa"] = [{value:"1", text:"Cairo"},
                      {value:"2", text:"Casablanka"},
                      {value:"3", text:"Tunis"},
                      {value:"4", text:"Maputu"}];
regiondb["asia"] = [{value:"1", text:"Baku"},
                    {value:"2", text:"Seul"},
                    {value:"3", text:"Tokio"},
                    {value:"4", text:"Ulan-Batar"},
                    {value:"5", text:"Stambul"}];

如何将此代码转换为 C#?我理解这是regiondb["asia"] = [{value:"1", text:"Baku"},阵列是否正确?

将代码从 JavaScript 转换为 C#

var regiondb = new Dictionary<String, Dictionary<String,String>>();
regiondb.Add("africa", new Dictionary<String,String> {
    { "1", "Cairo" },
    { "2", "Casablanka" },
    { "3", "Tunis" },
    { "4", "Maputu" },
});
// Same with asia

然后您可以访问它:

// regiondb.Keys           = ["africa", "asia"]
// regiondb["africa"].Keys = ["1", "2", "3", "4"]
// regiondb["africa"]["1"] = Cairo

这是一个在 C# 中使用标准对象的非常简单的示例。如果你想要一个1:1的翻译,你可能想看看一个像Json2CSharp这样的网站,它将创建一个对象结构(具有valuetext等属性来访问)。


使用实际对象的替代方法:

class RegionDB : IEnumerable<String>, IEnumerable
{
    private IDictionary<String, IEnumerable<City>> continents = new Dictionary<String, IEnumerable<City>>();
    public IEnumerable<String> Continents
    {
        get { return this.continents.Keys; }
    }
    public IEnumerable<City> this[String continent]
    {
        get
        {
            return this.continents.ContainsKey(continent)
                ? this.continents[continent]
                : Enumerable.Empty<City>();
        }
        set
        {
            this.continents[continent] = value ?? Enumerable.Empty<City>();
        }
    }
    public RegionDB()
    {
    }
    #region IEnumerable<String>
    IEnumerator IEnumerable.GetEnumerator()
    {
        return ((IEnumerable<String>)this).GetEnumerator();
    }
    IEnumerator<String> IEnumerable<String>.GetEnumerator()
    {
        return this.continents.Keys.GetEnumerator();
    }
    #endregion
}
class City
{
    public String Text { get; set; }
    public String Value { get; set; }
    public City(String text, String value)
    {
        this.Text = text;
        this.Value = value;
    }
}

和用法:

var regiondb = new RegionDB();
regiondb["africa"] = new[]{
    new City("Cairo", "1"),
    new City("Casablanka", "2"),
    new City("Tunis", "3"),
    new City("Maputu", "4")
};
regiondb["asia"] = new[]{
    new City("Baku", "1"),
    new City("Seul", "2"),
    new City("Tokio", "3"),
    new City("Ulan-Batar", "4"),
    new City("Stambul", "5")
};
// List data
foreach (var continent in regiondb) /* or: */ //foreach (var continent in regiondb.Continents)
{
    Console.WriteLine(continent);
    // List cities within
    foreach (var city in regiondb[continent])
    {
        Console.WriteLine("'tvalue = {0}, text = {1}", city.Value, city.Text);
    }
}

输出:

africa
  value = 1, text = Cairo
  value = 2, text = Casablanka
  value = 3, text = Tunis
  value = 4, text = Maputu
asia
  value = 1, text = Baku
  value = 2, text = Seul
  value = 3, text = Tokio
  value = 4, text = Ulan-Batar
  value = 5, text = Stambul

所以,它会是这样的:

var regiondb = new Dictionary<String, List<Pair>>(); // where Pair is an object that has a Text and Value property
var africaList = new List<Pair>(){ 
  new Pair { Text = "Cairo", Value = "1" },
  new Pair { Text = "Casablanka", Value = "2"} // and so on
};
regiondb.Add("africa", africaList);

这可能是 C# 中最接近的东西:

var regiondb = new
{
    africa = new[]
    {
        new
        {
            value = "1",
            text = "Cairo"
        },
        new
        {
            value = "2",
            text = "Casablanka"
        }
        //...
    },
    asia = new[]
    {
        new
        {
            value = "1",
            text = "Baku"
        },
        new
        {
            value = "2",
            text = "Seul"
        }
        //...
    }
};

您可以按如下方式访问其中的数据:

regiondb.africa[0].text//Cairo