【问题标题】:Defining constants in C#在 C# 中定义常量
【发布时间】:2018-03-06 13:32:11
【问题描述】:

我是 C/C++ 到 C# 开发人员。

我需要做类似下面的事情,

#define LEN 20
int data[LEN];

由于 C# 不支持#define,许多论坛建议声明一个const 变量。 const 变量可能在下面对我有帮助,但对上面没有帮助。

for (int a = 0; a < LEN; a++)
{
    x += data[LEN - a - 1];
}

那么,如何将常量也用于数组声明?

【问题讨论】:

  • 即使在 C++ 中,也不应该使用预处理器宏来定义常量...
  • 您所说的“不在上面”是什么意思? int x = data[LEN]; 没有声明数组类型的变量,也没有创建数组——这与常量无关,只是语法不正确。你可以使用int[] data = new int[LEN];...
  • 1) "我如何也使用常量来声明数组?" 问题是.. 数组大小没有在 C# 中保持不变,原因与在 C++ 中不需要将常量值传递给 new[LEN] 的原因相同。没有像 C++ 那样具有自动存储持续时间的数组。 2) #define 不会创建常量。它只是一个文本替换,它使用 find-and-replace 将每个出现的LEN 替换为20
  • @UlrichEckhardt 你能告诉我为什么我们不应该这样做吗?
  • @JonSkeet "above" 表示声明一个数组。声明 int x = data[LEN]; 现已更正。

标签: c# c++ constants


【解决方案1】:

C# 允许您创建多个内置类型using const keyword 的常量。

常量可以是数字、布尔值、字符串或空引用。

这是一个小例子:

public class Demo {

    public const int Length = 20;

    public void Main(string[] args) {
        var data = new int[Length];
        for (var i = 0 ; i != Length ; i++) {
            data[i] = 2*i + 3;
        }
    }

}

注意:C# naming guidelines 建议避免使用全大写命名。

【讨论】:

  • 感谢命名指南。
【解决方案2】:

其实你应该用它来实例化数组:

const int LEN = 20;
int[] data = new int[LEN];

【讨论】:

  • 不回答问题。 LEN 是什么?
  • 好吧,我认为这很清楚,因为问题与声明语法有关,所以我修改了我的答案以更清楚^^
【解决方案3】:

你可以这样做

static readonly int LEN = 20;

static void Main(string[] args)
{    
   int[] data = new int[LEN];
   for (int a = 0; a < LEN; a++)
   {
        int x = data[LEN];
   }
 }

请注意,该日期数组将默认初始化为 0。

另外,你会得到System.IndexOutOfRangeException for int x = data[LEN];,因为你要的是第 20 个索引,而数组中没有这样的索引

【讨论】:

  • 他说他是 C++ 开发人员,但仍然不知道数组是基于零的索引...奇怪
  • @sLowDowN 谢谢挑剔者。问题已更新以满足您的需求。
【解决方案4】:

您不应该使用常量来声明数组长度。此外,C# 中有许多数据结构允许您拥有动态大小的数组/列表/字典...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多