Port pascal const IdentChars = ['a'..'z','A'..'Z','_']; 对C#的声明

RM.*_*RM. 6 c# delphi

我正在将一个Delphi应用程序移植到C#.在其中一个单位中有一个这样的声明:

const
  IdentChars = ['a'..'z', 'A'..'Z', '_'];
Run Code Online (Sandbox Code Playgroud)

我没有找到类似C#的声明语法.

这是我能想到的最好的:

char[] identFirstChars; // = ['a'..'z', 'A'..'Z', '_'];
int size = (int)'z' - (int)'a' + 1 + (int)'Z' - (int)'A' + 1 + 1; 
identFirstChars = new char[size];
int index = 0;
for(char ch = 'a'; ch <= 'z'; ch = (char)((int)(ch) + 1))
{
    identFirstChars[index] = ch;
    index++;
}
for (char ch = 'A'; ch <= 'Z'; ch = (char)((int)(ch) + 1))
{
    identFirstChars[index] = ch;
    index++;
}
identFirstChars[index] = '_';
Run Code Online (Sandbox Code Playgroud)

必须有一种更有效的方式.

Mis*_*sha 6

IdentChars是一个集合,在C#中没有直接的等价(真的有点痛苦).其次,IdentChars是一组Ansi字符,而不是Unicode字符,所以在那里要小心.因此,最好在"移植"之前查看它是如何使用的,因为您需要的功能内置于Deplhi编译器中,您必须自己在C#中编写代码.


Yur*_*ken 5

那这个呢?

char[] identFirstChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_".ToCharArray();
Run Code Online (Sandbox Code Playgroud)

当然,您可以在代码中生成一个数组(这可能使用Enumerable.Range可以完成更少的行),但我认为在您的情况下它不值得.