我正在为我的WCF组件添加许可证检查,并在System.ComponentModel命名空间中找到了LicenseException。 如果用户输入无效的许可证密钥,我可以自由使用此异常类,或者创建自己的许可证密钥会更好吗?
我真的想找到更一般性问题的答案。抛出我在.NET中可以找到的任何类型的异常是安全的,例如ExecutionEngineException似乎是非常内部的东西。
if (!LicenceHelper.CheckLicence())
throw new ApplicationException("Invalid Serial Key or Activation Key");
throw new LicenseException(typeof(DataProvider));
哪一行代码优于第三代?
答案 0 :(得分:0)
我个人会选择选项3,编写自己的自定义异常并抛出它。
class InvalidSerialException : ApplicationException
{
public InvalidSerialException() :
base("Invalid Serial Key or Activation Key")
{
}
public InvalidSerialException(string message) : base(message)
{
}
public InvalidSerialException(string message, Exception innerException) : base(message, innerException)
{
}
protected InvalidSerialException(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
}
//elsewhere
if (!LicenceHelper.CheckLicence())
throw new InvalidSerialException());
这为您提供了更大的灵活性,例如,如果您希望在异常的有效负载中包含尝试的串行密钥,则可以使用自定义异常,但不能轻松处理.NET内置的两个异常。此外,它还可以更容易地在您的调用方法中捕获您想要的异常,而不是仅仅希望您捕获的ApplicationException
是您想要捕获的ApplicationException
。