c# - 为什么我似乎不能为常量字段赋值?

标签 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   }
}

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

  • 第 1 行|“Types_of_Accuracy.Decimal_Places”的类型为“Types_of_Accuracy”。字符串以外的引用类型的常量字段只能用 null 初始化。 (CS0134)
  • 第 3 行|“Types_of_Accuracy.Significant_Digits”的类型为“Types_of_Accuracy”。字符串以外的引用类型的常量字段只能用 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;
}

如有任何改进,我们将不胜感激。

最佳答案

  • 常量字段必须用常量值初始化。
  • 并且它们必须是值类型,或字符串,或者用 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);

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

关于c# - 为什么我似乎不能为常量字段赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24317105/

相关文章:

c# - 尝试在 sharpdevelop 中执行 subsonic 的 activerecord 时出现 T4 模板生成错误

c# - 为什么 sharpdevelop 使用 .content 作为标签,而 visual studio 使用 .text,即使它们都是 c#?

c# - 如果我有字符和长度,构建字符串的最简单方法是什么

javascript - 将文本框值传递给 JavaScript 中的编辑函数

c# - 同时运行 SharpDevelop 3.0 和 Visual Studio 2008 有什么问题吗?

c# - 哪个 C# IDE 提供最广泛的 AST 访问?

c# - 无法识别工具版本 "15.0"

c# - ASP.NET MVC 结合 Web API 路由

c# - Visual Studio 2013 中 C# 应用程序的数据库

c# - 将 C++ 字符返回到 C#