0

我有索引器并想检查它是否不为空,如果是则抛出 ArgumentNullException,但宪兵设置了警告

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;
    }
}

如何修复我的索引器?

4

1 回答 1

6

好吧,目前肯定是不对的。看这个:

if (key == null || value == null)
{
    throw new ArgumentNullException("key");
}

这意味着当它实际上应该是“值”时,它将抛出一个声称“键”为空的异常。

所以代码应该是这样的:

if (key == null)
{
    throw new ArgumentNullException("key");
}
if (value == null)
{
    throw new ArgumentNullException("value");
}

我不知道这是否会修复警告,但这将是正确的代码。

此错误报告表明这是宪兵中的一个尚未修复的错误。如果您可以仅为该索引器明确禁用警告,那可能是最好的方法。(我没有使用宪兵,所以我不知道这是否可行,但值得研究。)

于 2011-01-31T14:56:08.717 回答