Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于实现静态方法的静态字典字段_C#_Oop - Fatal编程技术网

C# 用于实现静态方法的静态字典字段

C# 用于实现静态方法的静态字典字段,c#,oop,C#,Oop,在一个类中,我有一些属性、两个静态字典、一个私有字段和一个静态方法。该方法初始化查询字典的属性,并在开关返回字符串后初始化。由于某些原因,这些值总是返回为null。以下是简化版本: using System; using System.Collections.Generic; namespace Test { class Program { public static string first { get; set; } public stati

在一个类中,我有一些属性、两个静态字典、一个私有字段和一个静态方法。该方法初始化查询字典的属性,并在开关返回字符串后初始化。由于某些原因,这些值总是返回为null。以下是简化版本:

using System;
using System.Collections.Generic;

namespace Test
{
    class Program
    {
        public static string first { get; set; }
        public static string second { get; set; }
        public static string third { get; set; }

        private static Dictionary<int, string> Symbols = new Dictionary<int, string>
        {
            [1] = "A",
            [2] = "B",
            [3] = "C"
        };
        private static Dictionary<int, string> Encoding = new Dictionary<int, string>
        {
            [1] = first,
            [2] = second,
            [3] = third
        };

        public static string Encode (int n)
        {
            string result;
            first = Symbols[1];
            second = Symbols[2];
            third = Symbols[3];

            switch (n)
            {
                case 1:
                    result = Encoding[1];
                    break;
                case 2:
                    result = Encoding[2];
                    break;
                case 3:
                    result = Encoding[3];
                    break;
                default:
                    result = "EMPTY";
                    break;
            }
            return result;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(Encode(1));
        }
    }
}
例如,Encode4正确地返回空字符串,但从1到3返回null。我错过了什么?有没有其他正确/干净的方法来做同样的事情?谢谢

该方法初始化查询字典的属性,并在开关返回字符串后初始化

是,当调用该方法时,属性将被初始化。但在填充编码字典后发生。一旦初始化类型,就会填充编码字典,此时,所有属性的值都将为null

我一点也不清楚您试图在这里实现什么,但我强烈建议重新设计代码以避免这种混淆

我还警告不要使用静态可变属性,我至少建议使用常规的.NET命名约定

该方法初始化查询字典的属性,并在开关返回字符串后初始化

是,当调用该方法时,属性将被初始化。但在填充编码字典后发生。一旦初始化类型,就会填充编码字典,此时,所有属性的值都将为null

我一点也不清楚您试图在这里实现什么,但我强烈建议重新设计代码以避免这种混淆

我还警告不要使用静态可变属性,我至少建议使用常规的.NET命名约定。

您调用的是result=Encoding[1],类型Dictionary的编码字段已使用数字索引器初始化,但在初始化时它指向空值属性。首先更改对属性的赋值不会更改字典正在使用的值,这将保持为null。案例1:首先返回将保存字典和错误。开关实际上与字典相同,只是不能在运行时修改。您正在调用result=Encoding[1],dictionary类型的编码字段已使用数字索引器初始化,但在初始化时它指向空值属性。首先更改对属性的赋值不会更改字典正在使用的值,这将保持为null。案例1:首先返回将保存字典和错误。开关实际上与字典是一样的,只是它不能在运行时修改。