0

我有一个静态类来保存字典和 2 个获取方法来访问它

这是我的课:


public static class ConfiguraCuadros
    {    
    public static Dictionary<string,Dictionary<string,Dictionary<string,Dictionary<string,string>>>> GetDictionary()
       {
           // Try to get the result in the static Dictionary
           return _configcuadros;
       }

       public static Dictionary<string, Dictionary<string, Dictionary<string, string>>> GetHoja(string key)
       {
           // Try to get the result in the static Dictionary
           Dictionary<string, Dictionary<string, Dictionary<string, string>>> result = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
           if (_configcuadros.TryGetValue(key, out result))
           {
               return result;
           }
           else
           {
               return null;
           }
       }

    public static readonly Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, string>>>> _configcuadros = new Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, string>>>> 
    {

     {   "Formato01",   //this is just a hint, the dictionary is much more extensive
                new Dictionary<string, Dictionary<string, Dictionary<string, string>>> 
                {
                    {
                        "F01C01A",      
                        new Dictionary<string, Dictionary<string, string>> 
                        {
                            {
                                "X",
                                new Dictionary<string, string>
                                {
                                    { "key1" , "value1" },
                                    { "key2" , "value2" },
                                    { "key3" , "value3" },
                                }
                            },
                        }
                    },

                }

            },
        }
    }`

当我使用getter方法时,

ConfiguraCuadros.GetDictionary();

它抛出一个异常:

mscorlib.dll 中出现了“System.ArgumentException”类型的第一次机会异常
“ConfiguraCuadros.GetDictionary()”引发了“System.TypeInitializationException”类型的异常
    base: {"'beDGRAIC.ConfiguraCuadros' 的类型初始化器抛出异常。"}
    类型名称:“beDGRAIC.ConfiguraCuadros”

或者

'ConfiguraCuadros.GetHoja("Formato01")' 引发了类型为 'System.TypeInitializationException' 的异常
    base: {"'beDGRAIC.ConfiguraCuadros' 的类型初始化器抛出异常。"}
    类型名称:“beDGRAIC.ConfiguraCuadros”

如您所见,我的意图是拥有一个静态字典。我认为问题出在字典声明中……但我看不出在哪里……

以防万一,“beDGRAIC”是我的命名空间。

谢谢你的帮助!

4

1 回答 1

1

您的代码(几乎)像我一样工作。

我只是添加了一个缺少的分号来编译它,然后可以ConfiguraCuadros.GetDictionary();毫无例外地调用。

这是缺少分号的代码:

public static class ConfiguraCuadros
{
    public static Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, string>>>> GetDictionary()
    {
        // Try to get the result in the static Dictionary
        return _configcuadros;
    }

    public static Dictionary<string, Dictionary<string, Dictionary<string, string>>> GetHoja(string key)
    {
        // Try to get the result in the static Dictionary
        Dictionary<string, Dictionary<string, Dictionary<string, string>>> result = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
        if (_configcuadros.TryGetValue(key, out result))
        {
            return result;
        }
        else
        {
            return null;
        }
    }

    public static readonly Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, string>>>> _configcuadros = new Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, string>>>> 
        {
            {   "Formato01",   //this is just a hint, the dictionary is much more extensive
                new Dictionary<string, Dictionary<string, Dictionary<string, string>>> 
                    {
                        {
                            "F01C01A",      
                            new Dictionary<string, Dictionary<string, string>> 
                            {
                                {
                                    "X",
                                    new Dictionary<string, string>
                                    {
                                        { "key1" , "value1" },
                                        { "key2" , "value2" },
                                        { "key3" , "value3" },
                                    }
                                },
                            }
                        }
                     }
              }
        };
}

[更新]

我同意上面关于检查 InnerException 作为类型初始化异常的一般规则的评论,特别是关于数据类型的不友好性质!

于 2014-10-29T21:28:49.707 回答