我正在使用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 }
}
当我尝试编译时。我收到了这些错误。
到目前为止,我最喜欢的解决方案是使用下面的代码替换上面的代码。
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;
}
非常感谢任何改进。
答案 0 :(得分:5)
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);
它与常量不完全相同:使用readonly字段的值实际上将在运行时读取字段,而使用常量将在编译时将其替换为其值。但在大多数情况下,这种差异并不重要。
答案 1 :(得分:2)
const
是编译时常量,在编译时无法分配引用类型,因此您需要使用只读静态字段来在运行时分配它们
public class Types_of_Accuracy{
public static readonly Types_of_Accuracy Decimal_Places=Type_of_Accuracy(false);
private bool SD;
public static readonly Types_of_Accuracy Significant_Digits=Type_of_Accuracy(true);
private static Types_of_Accuracy Type_of_Accuracy(bool Significant_digits){
Types_of_Accuracy TA=new Types_of_Accuracy();
TA.SD=Significant_digits;
return TA;
}
}