【发布时间】:2020-03-09 13:24:05
【问题描述】:
这可能是一件容易的事。但如果可能的话,我无法解决这个问题。
因为我们可以将表达式体成员应用于构造函数,并且由于 throw 表达式可用于表达式体成员,所以我们可以简化以下代码
public class Foo
{
public string ProA { get; set; }
public Foo(string proa)
{
if (proa == null)
{
throw new ArgumentNullException("Invalid proa value");
}
ProA = proa;
}
}
上面的代码可以简化为:
public class Foo
{
public string ProA { get; set; }
public Foo(string proa) => ProA = proa ??
throw new ArgumentNullException("Invalid proa value");
}
问题: 就我而言,我有多个参数(在参数化构造函数中)要在构造时解析,如果有人可以帮助我在构造函数的表达式体成员以及在 null 的情况下抛出表达式
public class Bar
{
public string ProA { get; set; }
public string ProB { get; set; }
public Bar(string proa, string prob)
{
if (proa == null)
throw new ArgumentNullException("Invalid proa value");
else if (prob == null)
throw new ArgumentNullException("Invalid prob value");
ProA = proa;
ProB = prob;
}
}
【问题讨论】:
-
您可以删除最后一个
else语句,因为所有其他情况都会引发异常。此外,第一个无效参数通常是引发异常的原因,因此您也可以删除第一个if语句。 -
@RufusL,你说得对,我可以进一步简化代码。然而,这个想法是为了展示当前的代码库。无论如何,多余的 else 被删除。谢谢
-
另外,我不相信你可以这样使用
nameof——它需要一个变量、类型或成员;不是字符串。 -
@RufusL,感谢您发现这一点。非常感谢。