为什么我不能在范围内的switch语句中使用“常量”?
使用此代码:
public partial class Form1 : Form { private static readonly int TABCONTROL_BASICINFO = 0; private static readonly int TABCONTROL_CONFIDENTIALINFO = 1; private static readonly int TABCONTROL_ROLESANDSECURITY = 2; private static readonly int TABCONTROL_INACTIVEINFO = 3; . . . int ActiveTabPage = tabControlWorker.SelectedIndex; switch (ActiveTabPage) { case TABCONTROL_BASICINFO: if (currentNode == "NodeBuckingham") { } else if (currentNode == "NodeNamath") { } else if (currentNode == "NodeParsons") { } else { } break;
…我必须用“0”替换“TABCONTROL_BASICINFO”,或者我得到“预期值为常数”
天堂到Murgatroyd! 不能查看并看到TABCONTROL_BASICINFO是0吗?
如果要在编译器方面使其成为常量表达式,请将其声明为const
:
// Note that static readonly is implied here private const int TABCONTROL_BASICINFO = 0;
或者遵循.NET命名约定……
private const int TabControlBasicInfo = 0;
或者使用枚举,因为你基本上得到了一组固定的值:
private enum TabControlType { // Could ditch the explicit values here if you want BasicInfo = 0, ConfidentialInfo = 1, ... }
顺便说一下,你也可以在C#中打开字符串,所以这个:
if (currentNode == "NodeBuckingham") { } else if (currentNode == "NodeNamath") { } else if (currentNode == "NodeParsons") { } else { }
可以变成:
switch (currentNode) { case "NodeBuckingham": ... break; case "NodeNamath": ... break; case "NodeParsons": ... break; default: ... break; }
readonly
变量不是常数。 该值在编译时是未知的,而是可以在声明中(如您所做)或在类构造函数(在本例中为您的类的静态构造函数)中初始化。
欲了解更多
https://msdn.microsoft.com/en-us/library/acdd6hb7(v=vs.71).aspx
您可以将其更改为:
private const int TABCONTROL_BASICINFO = 0;
除非您需要计算某些内容来初始化变量,否则请将其声明为const
。 它会稍微高效一点。
这不是一个常数; 它是一个只读变量 。 如果您希望它是常量,则将其标记为常量。
private const int TabControlBasicInfo = 0;
甚至更好:
private enum TabControl { BasicInfo, ... } ... switch(whatever) { case TabControl.BasicInfo:
静态只读不是常量变量。 它可以初始化。 而“ const ”是不变的。
上述就是C#学习教程:为什么我不能在范围内的switch语句中使用“常量”?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/953755.html