Я пытался обдумать расширение исключений в PowerShell. Мой первый проход в классе выглядит так...
class CustomException : Exception {
CustomException () {
}
CustomException ([String] $message) : base ($message) {
}
}
И использование соответствует ожиданиям: первый подход здесь создает имя типа, а второй - предоставленное сообщение...
try {
throw [CustomException]
} catch {
"$($_.Exception.Message)"
}
try {
throw [CustomException] 'Another message'
} catch {
"$($_.Exception.Message)"
}
Однако я действительно хочу иметь сообщение по умолчанию, поэтому я могу использовать первый пример во многих местах, но если я хочу пересмотреть сообщение, я могу сделать это один раз в классе. Или, возможно, даже локализовать сообщение в какой-то момент. Этот поток кажется, что это возможно в C#, особенно последние два поста. Итак, возьмем последний пример...
public class MyException : Exception
{
public MyException () : base("This is my Custom Exception Message")
{
}
}
Я думал, что смогу сделать то же самое в Powershell, вот так...
CustomException () : base ('Default message') {
}
Но я все еще получаю имя типа, когда не предоставляю сообщение. Это заставило меня задуматься, и я попытался...
try {
throw [System.IO.FileNotFoundException]
} catch {
"$($_.Exception.Message)"
}
И это ТАКЖЕ не предоставляет сообщение по умолчанию, только имя класса. Итак, этот код C# не делает то, что я думаю? Или это просто разница в поведении в Powershell? Или я что-то не так делаю?
: base("default message")
к конструктору по умолчанию отлично работает для меня. Какую именно версию PowerShell вы используете? - person Mathias R. Jessen   schedule 08.06.2020