当前位置:  开发笔记 > 编程语言 > 正文

如果无法加载预期的注册表设置,最合适的.NET异常是什么?

如何解决《如果无法加载预期的注册表设置,最合适的.NET异常是什么?》经验,为你挑选了3个好方法。

我有一个应用程序试图在其构造函数中加载一些预期的注册表设置.

如果无法加载这些(基本的,不可违约的)注册表设置,那么从BCL抛出最合适的.NET异常是什么?

例如:

 RegistryKey registryKey = Registry.LocalMachine.OpenSubkey("HKLM\Foo\Bar\Baz");

 // registryKey might be null!
 if (registryKey == null)
 {
     // What exception to throw?
     throw new ???Exception("Could not load settings from HKLM\foo\bar\baz.");
 }

bruno conde.. 14

为什么不创建自定义异常?

public class KeyNotFoundException : RegistryException
{
    public KeyNotFoundException(string message)
        : base(message) { }
}
public class RegistryException : Exception
{
    public RegistryException(string message)
        : base(message) { }
}

....

if (registryKey == null)
{
    throw new KeyNotFoundException("Could not load settings from HKLM\foo\bar\baz.");
}

此外,Exception您可以继承而不是继承自己ApplicationException.这取决于您希望应用程序在这种情况下出现的故障类型.



1> bruno conde..:

为什么不创建自定义异常?

public class KeyNotFoundException : RegistryException
{
    public KeyNotFoundException(string message)
        : base(message) { }
}
public class RegistryException : Exception
{
    public RegistryException(string message)
        : base(message) { }
}

....

if (registryKey == null)
{
    throw new KeyNotFoundException("Could not load settings from HKLM\foo\bar\baz.");
}

此外,Exception您可以继承而不是继承自己ApplicationException.这取决于您希望应用程序在这种情况下出现的故障类型.



2> Stephen Wrig..:

实际上,我不会在这里抛出异常.我将有一个默认值,然后使用该默认值创建密钥.

如果你必须有一个用户定义的值,我会使用ArgumentException(因为这基本上是你缺少的,你的构造函数的一个参数 - 你存储它的地方与你试图生成的异常类型无关) ).



3> chakrit..:

我会使用ArgumentException或ArgumentOutOfRangeException ..

throw new ArgumentException("Could not find registry key: " + theKey);

引用MSDN:

提供给方法的其中一个参数无效时引发的异常.

...

IMO编写适当的异常消息更为重要.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有