2010-02-19 46 views
5

实施例如何对C#中的继承基类构造函数执行操作?

public class ClassA 
{ 
    public ClassA(string someString){} 
} 

public class ClassB : ClassA 
{ 
    public ClassB(string someString):base(someString.ToLower()){} 
} 

我调用继承ClassB的构造函数。我传入一个null。 ToLower()在null上引发异常。我想在发生之前检查null。我怎样才能做到这一点?

+0

如果字符串为空,你想怎么做? – Andrew 2010-02-19 07:40:45

+0

更可能将null传递给ClassA。其他选项包括传递一个String.Empty或一些“默认”字符串。 – danmine 2010-02-19 07:42:52

+0

@丹宁:这相当容易克服;选择一个作为接受的答案,并提高其他人;它只有5个声望差异。 – 2010-02-19 08:56:10

回答

7

简单。使用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)

+1

我总是忘记这个?运营商,感谢提醒我:) – 2010-02-19 07:45:31

+0

哇,在这里,我试图让一些简单的努力!我甚至不知道? – danmine 2010-02-19 07:53:44

6

试试这个:

base(someString == null ? string.Empty : someString.ToLower()) 
3

试试这个

public class ClassA 
{ 
    public ClassA(string someString) { } 
} 

public class ClassB : ClassA 
{ 
    public ClassB(string someString) : base(someString == null ? "" : someString.ToLower()) { } 
} 
1

您应该检查是否someString是在你的基类空和采取相应的行动,否则,你可以做这样的事情,但我认为它非常不可读。

public class ClassB : ClassA 
{ 
    public ClassB(string someString):base((String.IsNullOrEmpty(someString)) ? String.Empty : someString.ToLower()){} 
} 
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) { } 
} 

这样的基类是不依赖于派生类中选择如何传递参数。