【发布时间】:2020-06-08 13:36:53
【问题描述】:
我一直在尝试在 PowerShell 中扩展异常。我的第一堂课是这样的……
class CustomException : Exception {
CustomException () {
}
CustomException ([String] $message) : base ($message) {
}
}
按预期使用,这里的第一种方法产生类型名称,第二种方法产生提供的消息...
try {
throw [CustomException]
} catch {
"$($_.Exception.Message)"
}
try {
throw [CustomException] 'Another message'
} catch {
"$($_.Exception.Message)"
}
但是,我真的很想有一个默认消息,所以我可以在很多地方使用第一个示例,但是如果我想修改消息,我可以在课堂上一次性完成。或者甚至可能在某个时候将消息本地化。 This thread 似乎暗示在 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)"
}
而且 ALSO 不提供默认消息,只提供类名。那么,那个 C# 代码没有做我认为它正在做的事情吗?或者这只是 Powershell 中的行为差异?还是我做错了什么?
【问题讨论】:
-
很奇怪,将
: base("default message")添加到默认构造函数对我来说效果很好。您使用的是哪个版本的 PowerShell? -
@mathias-r-jessen 我在 5.1。我终于摆脱了 2.0,但我不能强迫人们进入 Core。
-
我刚刚注意到缺少什么,请看我的回答
标签: powershell exception extending