【问题标题】:Invalid value in a list of an argument参数列表中的无效值
【发布时间】:2013-01-14 21:37:35
【问题描述】:

我有两个这样的课程

class ClassA
{
    // Some properties
    public String PropertyA { get; set; }
}

class ClassB
{
    public List<ClassA> PropertyB { get; private set; }

    ClassB()
    {
        PropertyB = new List<ClassA>();
    }
}

然后在其他地方我有这样的方法

public String MyMethod(ClassB argument)
{
    //do stuff with all the PropertyA values
}

我希望从参数中 PropertyB 中没有元素具有 null 或空 PropertyA(将生成无效结果),我应该抛出什么样的异常?参数异常?

编辑:所以我将尝试用文字来解释它:我有一个方法,它有一个 ClassB 类型的参数,ClassB 有一个 ClassA 列表,每个 ClassA 都有一个字符串属性。我正在使用此属性构建一个查询,所以我认为最好在使用查询时将其停在此处。

【问题讨论】:

  • 为什么在这种情况下需要抛出异常?我会让 .NET 框架抛出异常。
  • 您的意思是如果arguments 是一个包含:[someClassAInstance, null, anotherInstance] 的数组,您应该抛出什么,因为您不希望将null 引用作为元素值之一?编辑:和/或如果说anotherInstance.PropertyA == null 也无效,应该抛出异常?
  • @Vraiment 根据您的编辑,我建议您在方法文档中记录嵌套要求并执行预验证检查并抛出ArgumentException(或继承自该的自定义异常),或将检查移至较低级别的调用(可能是BuildQuery,最终可能将PropertyA 字符串作为输入参数,这将引发ArgumentNullException),这意味着您将开始构建查询并引发异常部分- 穿越。

标签: c# list arguments


【解决方案1】:

在我看到/使用/编写的代码中,ArgumentException 在参数出现通用错误时抛出(属性为空等)。如果参数本身为空,你会抛出一个ArgumentNullException

但是,如果我不编写某种库/框架,我通常不会这样做。一般来说,我让框架完成它的工作。

【讨论】:

  • 根据方法的用途,InvalidOperationException 也可能是合适的。
  • +1 MSDN 还建议使用 ArgumentException“如果传递了无效参数,则抛出 ArgumentException 或派生自 ArgumentException 的类。” 我也会抛出它,因为尽快失败是个好习惯。否则,如果NullReferenceException“来得太晚”或导致无效结果(如 OP 所述),您可能会产生副作用。 programmers.stackexchange.com/questions/147480/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2018-05-08
相关资源
最近更新 更多