Удалить [] удалит только элементы в массиве. Он не удалит память, указанную элементами массива. Если вы хотите удалить память, указанную элементами массива
Пока Вы ловите очень определенные исключения, просто сделайте попытку/выгоду.
Исключения не являются злыми, если используется правильно.
У меня есть метод, чтобы протестировать, допустим ли RegEx, но он просто обертывает regex в Попытку/Выгоду. Я не уверен, существует ли лучший способ сделать это, но я не мог бы найти тот.
Не без большой работы. Парсинг Regex может быть довольно включен, и нет ничего общедоступного в Платформе для проверки выражения.
Система. Текст. RegularExpressions. RegexNode. ScanRegex () надеется быть основной функцией, ответственной за парсинг выражения, но это является внутренним (и выдает исключения для любого недопустимого синтаксиса так или иначе). Таким образом, Вы были бы обязаны повторно реализовывать функциональность синтаксического анализа - который, несомненно, приведет к сбою в напряжении случаи или обновления Платформы.
я думаю, просто ловя ArgumentException, столь же хорошая идея, как Вы, вероятно, будете иметь в этой ситуации.
В зависимости от того, кто цель для этого, я был бы очень осторожен. Не трудно создать regexes, который может отследить в обратном порядке на себе и съесть много ЦП и памяти - они могут быть эффективным вектором Отказа в обслуживании.
В.NET, если Вы не пишете свой собственный синтаксический анализатор регулярного выражения (который я категорически не рекомендовал бы), Вы почти наверняка собираетесь должны обернуть создание нового объекта Regex с попыткой/выгодой.
Уродливый regex не хуже из причин исключения.
, Если Вы не уходите в отставку к очень ограниченное подмножество regex синтаксиса - и затем пишете regex (или синтаксический анализатор) для того - я думаю, что у Вас нет никакого другого способа протестировать, если это допустимо, но пытаться создать конечный автомат из него и заставить его соответствовать чему-то.
I think exceptions are OK in this case.
Here's what I put together:
private static bool IsValidRegex(string pattern)
{
if (string.IsNullOrEmpty(pattern)) return false;
try
{
Regex.Match("", pattern);
}
catch (ArgumentException)
{
return false;
}
return true;
}