C# 用于实现静态方法的静态字典字段
在一个类中,我有一些属性、两个静态字典、一个私有字段和一个静态方法。该方法初始化查询字典的属性,并在开关返回字符串后初始化。由于某些原因,这些值总是返回为null。以下是简化版本:C# 用于实现静态方法的静态字典字段,c#,oop,C#,Oop,在一个类中,我有一些属性、两个静态字典、一个私有字段和一个静态方法。该方法初始化查询字典的属性,并在开关返回字符串后初始化。由于某些原因,这些值总是返回为null。以下是简化版本: using System; using System.Collections.Generic; namespace Test { class Program { public static string first { get; set; } public stati
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:首先返回将保存字典和错误。开关实际上与字典是一样的,只是它不能在运行时修改。