Правильный ли этот фрагмент кода с Java на c #? - PullRequest
0 голосов
/ 26 января 2009

Я пытаюсь перенести некоторые вещи Java на C #. Мне просто интересно, если следующий код C # эквивалентен исходному Java-источнику.

Источник: Java Code

private static final Pattern SIMPLE_IDENTIFIER_NAME_PATTERN = 
    Pattern.compile("^[a-zA-Z_][a-zA-Z0-9_]*$");

    private static boolean isValidIdentifier(String s) {
        Matcher m = SIMPLE_IDENTIFIER_NAME_PATTERN.matcher(s);
        return (m.matches() && !reserved.contains(s));
    }

Пункт назначения: код C #

private static readonly Regex SIMPLE_IDENTIFIER_NAME_PATTERN = 
    new Regex("^[a-zA-Z_][a-zA-Z0-9_]*$", RegexOptions.Compiled);

private static bool IsValidIdentifier(string s)
{
    Match match = SIMPLE_IDENTIFIER_NAME_PATTERN.Match(s);
    return (match.Success && !Reserved.Contains(s));
}

Приветствия:)

Ответы [ 4 ]

3 голосов
/ 26 января 2009

Согласно моему комментарию, я думаю, что вы должны написать юнит-тест (или тесты), чтобы убедиться, что порт работает должным образом.

1 голос
/ 26 января 2009

Использование каретки и доллара указывает на то, что вы хотите сопоставить внедренные новые строки в строке темы, а не начало и конец всей строки. Если это так, то вам обязательно следует установить параметр RegexOptions.Multiline для вашего Regex. Если вы не установите эту опцию, ваша карета и доллар не будут иметь никаких особых последствий.

private static readonly Regex SIMPLE_IDENTIFIER_NAME_PATTERN = new Regex("^[a-zA-Z_][a-zA-Z0-9_]*$", RegexOptions.Compiled | RegexOptions.Multiline);

Возможно, стоит оценить необходимость компиляции этого регулярного выражения. Нужно ли его использовать повторно (например, в цикле)? Если нет, то ваш Regex фактически будет иметь более низкую производительность.

Помимо этого пункта, ваша конверсия представляется действительной. Как и предполагали некоторые другие, единственный способ быть уверенным в этом - это провести его модульное тестирование.

1 голос
/ 26 января 2009

Выглядит хорошо, но почему бы вам не начать с портирования своих модульных тестов?

0 голосов
/ 26 января 2009

Помните, что тип только для чтения не является неизменным. Это означает, что вы не можете изменить ссылку на регулярное выражение, на которую вы указываете, но вы можете изменить сам объект регулярного выражения. (К счастью, контракт на регулярное выражение не позволит вам изменить выражение)

Остерегайтесь того, что синтаксис регулярных выражений .Net не совпадает с синтаксисом регулярных выражений * nix, так что вас могут там укусить. Подтвердите в соответствии с документами MSDN, что вам нужно сделать, чтобы ваша строка:

Синтаксис регулярных выражений MSDN

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