实施例
public class ClassA
{
public ClassA(string someString){}
}
public class ClassB : ClassA
{
public ClassB(string someString):base(someString.ToLower()){}
}
我调用继承的ClassB构造函数。我传入null。 ToLower()在null上抛出异常。我希望在此之前检查null。我怎么能这样做?
答案 0 :(得分:7)
简单。使用null-coalescing operator:
public ClassB(string someString) :
base((someString ?? "").ToLower())
{
}
public ClassB(string someString) :
base(someString == null ? "" : someString.ToLower())
{
}
更好的是,我建议您向ClassB
添加一个无法构建的构造函数,它将调用base(string.Empty)
。
答案 1 :(得分:6)
试试这个:
base(someString == null ? string.Empty : someString.ToLower())
答案 2 :(得分:3)
试试这个
public class ClassA
{
public ClassA(string someString) { }
}
public class ClassB : ClassA
{
public ClassB(string someString) : base(someString == null ? "" : someString.ToLower()) { }
}
答案 3 :(得分:2)
你已经对你的问题得到了答案,但我只是想补充一点,这种方法让我觉得有些奇怪。调用者是否真的有责任确保输入是小写的?我肯定会在基类构造函数中进行此检查和转换:
class Base
{
private string _someString;
public Base(string someString)
{
_someString = someString != null ? someString.ToLower() : null;
}
}
class Derived : Base
{
public Derived(string someString) : base(someString) { }
}
这样,基类不依赖于派生类如何选择传递参数。
答案 4 :(得分:1)
您应该检查基类中的someString
是否为null并采取相应的行动,否则您可以执行此类操作,但我认为它非常难以理解。
public class ClassB : ClassA
{
public ClassB(string someString):base((String.IsNullOrEmpty(someString)) ? String.Empty : someString.ToLower()){}
}