【发布时间】:2016-09-19 13:01:26
【问题描述】:
为了更好地说明我的情况,我做了一个例子
void Main()
{
var a = new Lol(null);
}
public class Lol
{
public Lol(string a, string b)
{
if(a == null || b == null)
{
throw new Exception();
}
}
public Lol(Tuple<string, string> k)
: this(k.Item1, k.Item2)
{
}
}
在这种情况下,我在第二个构造函数中得到了NullReferenceException。有没有办法从方法内部处理它,保持相同的结构,或者我应该创建一个私有方法并让两个构造函数都调用这个方法?
【问题讨论】:
-
如果你有 C# 6 (VS 2015) 你可以做
this(k?.Item1, k?.Item2)。 -
或者不要调用
this...并在第二个构造函数中执行它,这可能更合适,因为您在那里执行不同的空检查。 -
不要调用这个。在实际的第二个构造函数中处理任何赋值。然后,您可以在构造函数本身内部进行 null 检查。
-
或者您将第一个 ctor 更改为
Lol(str a, str b) : this(Tuple.Create(a, b)),第二个 ctor 检查整个元组及其项。 -
@DavidG 我认为你的方法是制作结构良好的代码的最佳方式
标签: c# nullreferenceexception constructor-overloading