2011-06-09 41 views
0

如果我有像下面这样的类,我将如何创建函数nullToEmptyString()?
如果object为DBNull.Value,则返回一个空字符串,否则返回该值。该功能应该适用于每个对象。创建自己的函数,检查空值,并返回一个空字符串

public class Person 
{ 
    public object surname { get; set; } 
    public object lastname { get; set; } 
    public object zip_code { get; set; } 
    public object tele { get; set; } 
} 

我检索来自DB的人员名单,我想打印的价值,如果它有一个值,否则一个空字符串。

foreach (var person in listFromDB) 
{ 
    person.surname.nullToEmptyString() 
    person.lastname.nullToEmptyString() 
} 

编辑
总之,这个功能应该工作一样的ToString()函数,而且也将能够处理的DBNull值。

+0

字符串是不变的,所以你不能改变当前实例。你将不得不使用如下语法:person.surname = person.surname.nullToEmptyString(); – Arjen 2011-06-09 09:02:48

+0

那么这里的两个答案是无效的? – Niklas 2011-06-09 09:06:40

+0

没有。他们都是有效的。这取决于您是希望修改人员类别值还是希望显示。如果你想修改,你需要按照@Arjen的建议去做,否则我刚刚显示的值甚至可以在单独的变量中进行。 – Ashish 2011-06-09 09:20:59

回答

1
public static string nullToEmptyString(this string dbStr) 
{ 
    return (dbStr == null || dbStr == "") ? "" : dbStr; 
} 

foreach (var person in listFromDB) 
{ 
    Response.Write(person.surname.nullToEmptyString()); 
    Response.Write(person.lastname.nullToEmptyString()); 
} 

希望这会有所帮助。

+0

啊,所以* this *指向您运行.nullToEmptyString()的对象? – Niklas 2011-06-09 08:59:00

+0

是的。这是一个新的基本亲族C#3.0被称为扩展方法。 – Ashish 2011-06-09 09:01:33

+0

我应该在哪里创建这个功能?如果我尝试在我的Person类中使其成为函数,我会得到错误“扩展方法必须在非泛型静态类中定义”。 – Niklas 2011-06-09 09:11:01

1

尝试像

public string Somename(this string somestring) 
{ 
     return somestring ?? ""; 
}