2011-06-09 103 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 ?? ""; 
}