我有索引器,想检查它是否为空,如果是,则抛出ArgumentNullException,但Gendarme设置警告
InstantiateArgumentExceptionCorrectlyRule :此方法抛出ArgumentException(或派生)异常,而不指定现有参数名称。这可以向开发人员隐藏有用的信息。修复异常参数以使用正确的参数名称(或确保参数的顺序正确)。
public override LocalizedString this[string key]
{
get
{
if (key == null)
{
throw new ArgumentNullException("key");
}
return base[key];
}
set
{
if (key == null || value == null)
{
throw new ArgumentNullException("key");
}
base[key] = value;
}
}
如何修复索引器?
答案 0 :(得分:6)
嗯,目前肯定不对。看看这个:
if (key == null || value == null)
{
throw new ArgumentNullException("key");
}
这意味着它会抛出一个异常,声称“key”在它实际上应该是“value”时为null。
所以代码应如下所示:
if (key == null)
{
throw new ArgumentNullException("key");
}
if (value == null)
{
throw new ArgumentNullException("value");
}
我不知道是否会修复警告,但这将是正确的代码。
This bug report表明这是Gendarme中的一个尚未修复的错误。如果您可以明确禁用该索引器的警告,那可能是最好的方法。 (我没有使用过宪兵,所以我不知道这是否可行,但值得研究。)