Предположим, что я внес некоторые изменения в рабочем каталоге и случайно отметил несколько файлов (которые включают некоторые измененные) для удаления. Как я снимаю выделение с файлов для удаления, не теряя изменения, которые я внес?
Существует два варианта с использованием HG Revert :
HG Revert -a
, который вернется к предыдущему пересмотре и помещает все изменения в новые файлы с помощью .orig, добавленные к именам
HG Revert [Имена файлов для неправомерных], чтобы просто вернуть эти файлы
, я бы, вероятно, пошел с последним
HG Revert
Я почти уверен, что Mercurial даже делает резервные копии ваших изменений по умолчанию.
Видимо, можно скинуть ноль, но это все равно где-то превращено в исключение.
Попытка создания объекта null
приводит к (полностью не связанному) исключению Null Reference.
Вопрос о том, почему разрешено выдавать null
, - это вопрос о том, почему это разрешено:
object o = null;
o.ToString();
-121--849250- Потому что спецификация языка ожидает выражение типа System.Exception
(поэтому null
является допустимым в этом контексте) и не ограничивает это выражение значением, отличным от null. В общем, нет пути, что он мог бы обнаружить, является ли значение этого выражения null
или нет. Среда выполнения в любом случае должна иметь дело с null
. Смотрите:
Exception ex = null;
if (conditionThatDependsOnSomeInput)
ex = new Exception();
throw ex;
Они могли бы, конечно, сделать конкретный случай метания null
литерала недействительным, но это не очень помогло бы, так почему бы не тратить пространство спецификации и уменьшить согласованность для небольшой выгоды?
Отказ от ответственности (прежде чем я получил пощечину от Эрика Липперта): Это мои собственные предположения о рассуждениях, лежащих в основе этого проектного решения. Конечно, я не был на совещании конструкторов;)
Ответ на ваш второй вопрос, может ли переменная выражения, обнаруженная в предложении catch, быть пустой: Хотя в спецификации C # ничего не говорится о том, могут ли другие языки вызывать распространение исключения null
, она определяет способ распространения исключений:
Предложения catch, если таковые имеются, проверяются в порядке появления, чтобы найти подходящий обработчик для исключения. Первое предложение catch , указывающее тип исключения или базовый тип типа исключения , считается совпадающим. Общее предложение catch считается совпадающим для любого типа исключения. [...]
Для null
оператор bold имеет значение false. Таким образом, хотя чисто основываясь на том, что говорит спецификация C #, мы не можем сказать, что базовая среда выполнения никогда не будет выбрасывать NULL, мы можем быть уверены, что даже если это так, она будет обрабатываться только общим предложением catch {}
.
Для реализаций C # в CLI можно обратиться к спецификации ECMA 335. В этом документе определяются все исключения, создаваемые внутри интерфейса командной строки (ни одно из них не имеет значения null
), и упоминается, что определяемые пользователем объекты исключений вызываются командой throw
. Описание этой инструкции практически идентично инструкции C # throw
(за исключением того, что она не ограничивает тип объекта System.Exception
):
Описание:
Инструкция
throw
передает объект исключения (типO
) в стек и очищает стек. Для получения подробной информации о механизме исключений см. Раздел I.
[Примечание: Хотя CLI разрешает передачу любого объекта, CLS описывает определенный класс исключений, который должен использоваться для языковой совместимости.end note]Если
obj
имеет значениеnull
, возникают исключения:
System.StartReferureException
.Правильность:
Правильный CIL гарантирует, что объект всегда будет иметь значение
null
или ссылку на объект (т.е. типO
).
Я считаю, что их достаточно для того, чтобы сделать вывод о том, что изъятые исключения никогда не являются пустыми
.
После вашего комментария к jk я проверил hg забыть
. Кажется, это просто ярлык для hg remove -Af
, что означает, что это реальная противоположность hg add
.
После этого, если вы использовали hg remove -Af
, то вы сможете вернуть это с помощью hg add
(я только что попробовал это и, кажется, работает).