Что предпочтительнее: Regex.Replace () или. aRegexObject.Replace ()? - PullRequest
2 голосов
/ 22 января 2009

Это продолжение этого вопроса

Первые два ответа являются правильными и полными, и в конце дня дают точно такой же результат. Однако один использует объект Regex и вызывает метод aRegex.Replace (...) (ответ Джоэла), а другой использует статический метод Regex.Replace (...). (Ответ CMS).

Какой метод предпочтительнее?
При каких обстоятельствах вы изменили бы свое мнение?

Ответы [ 3 ]

6 голосов
/ 22 января 2009

Использование статического экземпляра каждый раз будет создавать новый объект Regex, поэтому лучше создать его экземпляр самостоятельно. Вот что я нашел с помощью Reflector на System.dll:

public static string Replace(string input, string pattern, string replacement)
{
    return new Regex(pattern, RegexOptions.None, true).Replace(input, replacement);
}

Кроме того, если вы создадите свой экземпляр, вы также сможете скомпилировать его и повысить производительность для многократного использования.

Вы можете отправить RegexOptions.Compiled на одну из статических Replace перегрузок, но это бессмысленно, поскольку объект Regex, для которого будет создан экземпляр этого флага, не может быть снова использован.

2 голосов
/ 23 января 2009

Это не так неэффективно, как кажется. Переходя к конструктору Regex с рефлектором, он кэширует скомпилированный код регулярного выражения. Это, наверное, самая трудоемкая часть.

Обычно я бы изначально использовал Regex.Replace (), потому что он более удобен и изменяется только в случае проблем с производительностью.

Также для удобства вы можете написать методы расширения для строки, например:

public static string RegexReplace(this string source, string pattern, string replacement)
{
    return Regex.Replace(source, pattern, replacement);
}
1 голос
/ 22 января 2009

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

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