为什么我似乎无法为常量字段赋值?

1 c# sharpdevelop

我正在使用c#并尝试将逻辑(非空)值分配给我的自定义类型常量字段.这是怎么回事.

public class Types_of_Accuracy{
1   public const Types_of_Accuracy Decimal_Places=Type_of_Accuracy(false);
2   private bool SD;
3   public const Types_of_Accuracy Significant_Digits=Type_of_Accuracy(true);
4   private static Types_of_Accuracy Type_of_Accuracy(bool Significant_digits){
5       Types_of_Accuracy TA=new Types_of_Accuracy();
6       TA.SD=Significant_digits;
7       return TA;
8   }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时.我收到这些错误.

  • 第1行|'Types_of_Accuracy.Decimal_Places'的类型为'Types_of_Accuracy'.除string之外的引用类型的const字段只能用null初始化.(CS0134)
  • 第3行|'Types_of_Accuracy.Significant_Digits'的类型为'Types_of_Accuracy'.除string之外的引用类型的const字段只能用null初始化.(CS0134)

到目前为止,我最喜欢的解决方案是使用下面的代码替换上面的代码.

public class Types_of_Accuracy{
1   static Types_of_Accuracy(){
2   Decimal_Places.SD=false;
3   Significant_Digits.SD=true;
4   }
5   public const Types_of_Accuracy Decimal_Places=null;
6   private bool SD;
7   public const Types_of_Accuracy Significant_Digits=null;
}
Run Code Online (Sandbox Code Playgroud)

任何改进将不胜感激.

Tho*_*que 5

  • 必须使用常量值初始化常量字段.
  • 它们必须是值类型或字符串,或者使用null初始化.

Types_of_Accuracy是一个类(引用类型),并且您尝试使用方法调用初始化常量,这些方法调用不是常量.作为解决方法,您可以将字段声明为static readonly:

public static readonly Types_of_Accuracy Decimal_Places = Type_of_Accuracy(false);
public static readonly Types_of_Accuracy Significant_Digits = Type_of_Accuracy(true);
Run Code Online (Sandbox Code Playgroud)

它与常量不完全相同:使用readonly字段的值实际上将在运行时读取字段,而使用常量将在编译时将其替换为其值.但在大多数情况下,这种差异并不重要.