我正在研究一个给出字符串参数的方法.string参数的有效值是null或string.Empty以外的任何值.所以我的代码看起来像这样.
private void SomeMethod(string someArgument) { if(string.IsNullOrEmpty(someArgument)) throw new ArgumentNullException("someArgument"); // do some work }
没有什么太令人兴奋的了.我的问题是,即使字符串等于string.Empty,也可以抛出ArgumentNullException吗?因为从技术上讲它不是空的.如果你认为它不应该抛出ArgumentNullException应该抛出什么异常?
Ahm*_*eed 39
应该抛出ArgumentExceptionString.Empty
.这表示除了null之外的问题.为了避免NullReferenceException
我首先检查null,然后我修剪并检查空案例以防止任何空格传递.
private void SomeMethod(string someArgument)
{
if(someArgument == null)
throw new ArgumentNullException("someArgument");
if (someArgument.Trim() == String.Empty)
throw new ArgumentException("Input cannot be empty", "someArgument");
// do some work
}
Run Code Online (Sandbox Code Playgroud)
从.NET 4.0开始,您可以使用该String.IsNullOrWhiteSpace
方法一次性执行这些检查.通过这样做,您放弃了指定粒度异常类型的能力,因此我会选择ArgumentException
并相应地更新消息.
ArgumentException
如果空字符串不是您方法的可接受输入,则应该抛出一个.如果你抛出一段ArgumentNullException
时间他们没有提供null
参数,那么客户可能会非常困惑.
这只是另一个用例.您可能还有不接受空输入值但接受空字符串的方法.在整个应用程序中保持一致非常重要.
考虑到已经说过的所有内容(Joe / Ahmad Mageed),那么我将为这种情况创建一个例外。
class ArgumentNullOrEmptyException : ArgumentNullException
Run Code Online (Sandbox Code Playgroud)