C# 期望空值时要引发的异常?

C# 期望空值时要引发的异常?,c#,exception-handling,C#,Exception Handling,如果我期望一个空值并得到一个定义的值(在属性的getter中),并且想要抛出一个异常,那么在csharp中正确的方法是什么?在这种情况下,是否已经定义了有意义的东西?我的猜测是: throw new ArgumentException("Parameter was expected to be null, value was provided."); ArgumentOutOfRangeException也可以工作,但通常在存在定义良好的范围时使用,而不是空与非空。我可能会使用Argu

如果我期望一个空值并得到一个定义的值(在属性的getter中),并且想要抛出一个异常,那么在csharp中正确的方法是什么?在这种情况下,是否已经定义了有意义的东西?

我的猜测是:

throw new
    ArgumentException("Parameter was expected to be null, value was provided.");

ArgumentOutOfRangeException
也可以工作,但通常在存在定义良好的范围时使用,而不是空与非空。

我可能会使用
ArgumentOutOfRangeException
我已经看到使用了
InvalidOperationException
,就像在尝试设置两次的上下文中一样。比如说,

if(displayMessage != null)
  throw new InvalidOperationException("The display message may not be set more than once.");

displayMessage = myAwesomeMessage;

@Joe作为一个依赖于null值的副设计可能是一个潜在的维护问题,因为每次使用可以返回null的成员都必须检查它。通常需要一种避免这种情况的设计。这是一种不同寻常的安排,除非您将其设置为输出参数(否则,为什么还要担心接收该参数?)。如果不是,将其设置为null会有什么副作用?出于好奇,您能否告诉我们为什么要强制设置null值?我也想知道您为什么要这样做?如果您总是想要null,即一个已知的值,那么首先就不要接受参数。@Joe:因此,如果存在错误的配置,您基本上希望引发异常,而不是如果值为null。我宁愿选择像
ConfigurationErrorException
这样的东西,或者选择一个表示这一事实的自定义异常。+1抛出您自己的异常可以提供“人类可读”的错误,当用户看到这些错误时,这些错误是有意义的。语境化错误是最好的方法。