Port pascal const IdentChars = ['a' .. 'z', 'A' .. 'Z', '_'];объявление в C # - PullRequest
6 голосов
/ 12 июня 2011

Я портирую приложение Delphi на C #. В одном из подразделений есть объявление вроде этого:

const
  IdentChars = ['a'..'z', 'A'..'Z', '_'];

Я не нашел похожий синтаксис объявления для 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] = '_';

Должен быть более эффективный способ.

Ответы [ 6 ]

6 голосов
/ 12 июня 2011

IdentChars - это набор, который не имеет прямой эквивалентности в C # (правда, немного неприятно).Во-вторых, IdentChars - это набор символов Ansi, а не символов Unicode, поэтому будьте осторожны.Поэтому лучше посмотреть, как он используется, перед «портированием», потому что требуемая функциональность встроена в компилятор Deplhi, и вам придется кодировать это самостоятельно в C #.

5 голосов
/ 12 июня 2011

Как насчет этого?

char[] identFirstChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_".ToCharArray();

Конечно, вы можете сгенерировать массив в своем коде (это, вероятно, можно сделать с помощью гораздо меньшего количества строк, используя Enumerable.Range ), нодумаю, что в вашем случае это того не стоит.

1 голос
/ 12 июня 2011

попробуйте следующее,

 public static char[] GetConstants()
        {
            var array = Enumerable.Range((int) 'a', 26).ToList();
            array.AddRange(Enumerable.Range((int) 'A', 26));
            array.Add('_');
            return array.Select(z => (char) z).ToArray();

        }
1 голос
/ 12 июня 2011

Не самый эффективный способ, но, по крайней мере, вы не пропустите символы по ошибке:

var chars =
    Enumerable.Range('a', 'z' - 'a')
    .Concat(Enumerable.Range('A', 'Z' - 'A'))
    .Select(arg => (char)arg)
    .Concat(new[] { '_' })
    .ToArray();
1 голос
/ 12 июня 2011
char[] ar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_".ToArray();
0 голосов
/ 12 июня 2011

char[] identFirstChars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_".ToCharArray() один быстрый и грязный способ сделать это;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...