星期三, 11月 04, 2009

運算子 ?? 的應用例子

昨天看書看到一個還不錯的技巧..現在分享給大家..我們直接用例子來說故事吧..需求是..

-----------------------------------------------------------------------------------------------------------------------
資料庫有 name, nickname ,lastname 這三個欄位..我們需要取出值來運算..
如果 name 欄位有值我們就拿 name 當作 user 的名稱..
如果 name 是空值(null)而 nickname 欄位有值我們就拿 nickname 當作 user 的名稱..
如果 name 跟 nickname 都是空值只 lastname 有值我們用 lastname 來當作 user 的名稱..
如果都是空值..我們就用一個字串來代替..
-----------------------------------------------------------------------------------------------------------------------

把上述的需求轉成下面程式..

//取得資料
var dr = GetData().AsEnumerable().First();
//抓取個別資料塞到變數裡
string name = dr.Field<string>("name");
string nickname = dr.Field<string>("nickname");
string lastName = dr.Field<string>("lastName");
//顯示結果
string username;
if (!string.IsNullOrEmpty(name))
{
username = name;
}
else
{
if (!string.IsNullOrEmpty(nickname))
{
username = nickname;
}
else
{
if (!string.IsNullOrEmpty(lastName))
{
username = lastName;
}
else
{
username = "某某";
}
}
}
Console.WriteLine(username + " 先生");
Console.Read();

上面這段程式看起來露露長..看起來就不怎麼好看..我們可以用"??"這運算子的技巧來很方便的簡化這段程式..看code吧..

//取得資料
var dr = GetData().AsEnumerable().First();
//抓取個別資料塞到變數裡
string name = dr.Field<string>("name");
string nickname = dr.Field<string>("nickname");
string lastName = dr.Field<string>("lastName");
//顯示結果
string username= name ?? nickname ?? lastName ?? "某某";
Console.WriteLine(finalName + " 先生");
Console.Read();

很簡單吧..這樣看起來順眼多啦..有問題再討論吧..

ps:運算子只能用在 reference type 阿 value type 沒有 null 的啦..

13 則留言:

匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。
匿名 提到...
網誌管理員已經移除這則留言。