首页 > 解决方案 > 从 php 到 c#:字典数组,还是字典字典?

问题描述

我是编程新手。我有这个 php 代码,它基本上用于翻译 txt 文件中的一些句子:

$LANG = array();

$LANG['en'] = array(
    11 => "Name",
    20 => "Surname",
    21 => "Age",
    22 => "Profession",
);
$LANG['es'] = array(
    11 => "Nombre",
    20 => "Apellido",
    21 => "Edad",
    22 => "Profesión",
);

我正在尝试在 c# 中做同样的事情,如下所示:

Dictionary<int, string>[] LANG = new Dictionary<int, string>[]
        {
        new Dictionary<int, string>(),
        LANG['en']=new Dictionary<int, string>()
             {
                 {11, "Name"},
                 {20, "Surname"},
                 {21, "Age"},
                 {22, "Profession"}
             },
        LANG['es']=new Dictionary<int, string>()
             {
                 {11, "Nombre"},
                 {20, "Apellido"},
                 {21, "Edad"},
                 {22, "Profesión"}
             }
        };

1)这个c#做的和php代码完全一样吗?我应该做一个字典数组,还是应该做一个字典字典?

2) 对于LANG['en']and LANG['es'],我收到错误消息“字段初始化程序无法引用非静态字段、方法或属性‘Form1.LANG’。我做错了什么?

标签: c#phpdictionary

解决方案


  1. 是的。PHP等效于 in 的关联数组C#将是Dictionary. Array inC#不支持非整数索引,因此您需要Dictionarystringkey 一起使用,因此您必须使用字典字典。

  2. 显然语法无效。要将您的PHP代码转换为C#执行以下操作

    //instantiate dictionary of dictionaries
    var LANG = new Dictionary<string, Dictionary<int, string>>();

    //set dictionary for "en" key
    LANG["en"] = new Dictionary<int, string>()
    {
        { 11, "Name" },
        { 20, "Surname" },
        { 21, "Age" },
        { 22, "Profession" }
    };

    //set dictionary for "es" key
    LANG["es"] = new Dictionary<int, string>()
    {
        { 11, "Nombre" },
        { 20, "Apellido" },
        { 21, "Edad" },
        { 22, "Profesión" }
    };

以上也可以初始化为单个语句:

var LANG = new Dictionary<string, Dictionary<int, string>>
{
    { "en", new Dictionary<int, string>
        {
            { 11, "Name" },
            { 20, "Surname" },
            { 21, "Age" },
            { 22, "Profession" }
        }
    },
    { "es", new Dictionary<int, string>
        {
            { 11, "Nombre" },
            { 20, "Apellido" },
            { 21, "Edad" },
            { 22, "Profesión" }
        }
    }
};

C# 现在还提供了一种基于索引器的语法来初始化字典。新语法中的上述等效项如下所示:

var LANG = new Dictionary<string, Dictionary<int, string>>
{
    ["en"] = new Dictionary<int, string>
    {
        [11] = "Name",
        [20] = "Surname",
        [21] = "Age",
        [22] = "Profession"
    },

    ["es"] = new Dictionary<int, string>
    {
        [11] = "Nombre",
        [20] = "Apellido",
        [21] = "Edad",
        [22] = "Profesión"
    }
};

推荐阅读