public class ClassA
{
public ClassA(string someString){}
}
public class ClassB : ClassA
{
public ClassB(string someString):base(someString.ToLower()){}
}
我调用继承ClassB的构造函数。我传入一个null。 ToLower()在null上引发异常。我想在发生之前检查null。我怎样才能做到这一点?
public class ClassA
{
public ClassA(string someString){}
}
public class ClassB : ClassA
{
public ClassB(string someString):base(someString.ToLower()){}
}
我调用继承ClassB的构造函数。我传入一个null。 ToLower()在null上引发异常。我想在发生之前检查null。我怎样才能做到这一点?
简单。使用null-coalescing operator:
public ClassB(string someString) :
base((someString ?? "").ToLower())
{
}
或者使用ternary operator
public ClassB(string someString) :
base(someString == null ? "" : someString.ToLower())
{
}
更重要的是,我建议你到一个无参数constuctor添加到ClassB
,它将调用base(string.Empty)
。
我总是忘记这个?运营商,感谢提醒我:) – 2010-02-19 07:45:31
哇,在这里,我试图让一些简单的努力!我甚至不知道? – danmine 2010-02-19 07:53:44
试试这个:
base(someString == null ? string.Empty : someString.ToLower())
试试这个
public class ClassA
{
public ClassA(string someString) { }
}
public class ClassB : ClassA
{
public ClassB(string someString) : base(someString == null ? "" : someString.ToLower()) { }
}
您应该检查是否someString
是在你的基类空和采取相应的行动,否则,你可以做这样的事情,但我认为它非常不可读。
public class ClassB : ClassA
{
public ClassB(string someString):base((String.IsNullOrEmpty(someString)) ? String.Empty : someString.ToLower()){}
}
你已经在你的问题得到答案,但我只想补充一点的办法让我觉得有点奇怪。确保输入是小写的,确实是调用者的责任吗?我肯定会做这样的检查,转换的基类构造函数来代替:
class Base
{
private string _someString;
public Base(string someString)
{
_someString = someString != null ? someString.ToLower() : null;
}
}
class Derived : Base
{
public Derived(string someString) : base(someString) { }
}
这样的基类是不依赖于派生类中选择如何传递参数。
如果字符串为空,你想怎么做? – Andrew 2010-02-19 07:40:45
更可能将null传递给ClassA。其他选项包括传递一个String.Empty或一些“默认”字符串。 – danmine 2010-02-19 07:42:52
@丹宁:这相当容易克服;选择一个作为接受的答案,并提高其他人;它只有5个声望差异。 – 2010-02-19 08:56:10