[英]More Efficient If\Else?
是否可能有更簡潔/有效的方式寫出此if / else語句? 我必須對此數據庫中的每個字段(將近200個字段)進行null檢查,並且最后代碼看起來會很混亂。 :\\
if (dr["OLD_NUMBER"] != DBNull.Value)
{
lblOldNumber.Text = dr["OLD_NUMBER"].ToString();
}
else
{
lblOldNumber.Text = string.Empty;
}
// A bunch more with different lbls and columns
你可以擺脫的if
完全。
DBNull.Value.ToString()
返回一個空字符串。
你可以做
lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;
上面的語句需要較少的行,並且對我來說更具可讀性。
lblOldNumber.Text = string.Empty;
if (dr["OLD_NUMBER"] != DBNull.Value)
{
lblOldNumber.Text = dr["OLD_NUMBER"].ToString();
}
或者你像這樣的make功能
void ApplyValue(Label label,object value, string defaultValue){
label.Text =defaultValue;
if (value != DBNull.Value)
{
label.Text = value.ToString();
}
}
並使用下一個代碼
ApllyValue(lblOldNumber,dr["OLD_NUMBER"],string.Empty);
您可以使用以下內容:
lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;
有關?:運算符而不是if的更多信息,請參見:(C#參考)
作為經驗法則,當您看到這種重復時,編寫一個函數進行處理。
string FormatIt(object value)
{
return value.ToString(); // or whatever the logic is like
}
然后:
lblOldNumber.Text = FormatIt(dr["OLD_NUMBER"]);
因此,如果您必須修改代碼以格式化貨幣或其他格式,則可以在一個地方進行更改。
像這樣:
var labels = new Dictionary<string, YourLabelClass>
{
{"OLD_NUMBER", lblOldNumber},
//Add your 200 fields here
{"ANOTHER_NUMBER", lblAnotherNumber},
};
foreach (var label in labels)
{
label.Value.Text = dr[label.Key].ToString();
}
查詢數據庫時,可以從數據集中刪除空值。
var result = (context.MyTable.Where(c => c.OLD_NUMBER != null));
我可能會寫一個方法:
void TextOrNull(object item, Label lbl)
{
lbl.Text = item != DBNull.Value ? item.ToString() : String.Empty;
}
並這樣稱呼:
TextOrNull(dr["OLD_NUMBER"], lblOldNumber);
我將制作一個包含此內容的方法,例如:
private void setLabelText( IDataRecord dr, string columnName, Label label )
{
label.Text = string.Empty
if (dr[columnName] != DBNull.Value)
{
label.Text = dr[columnName].ToString();
}
}
然后只需使用適當的標簽和記錄名稱等進行調用。
setText( dr, "OLD_NUMBER", lblOldNumber );
我還沒有這么多的嘗試,但有一個ItemArray
上DataRow
類將返回該項目的一個對象數組DataRow
。 可能能夠以這種方式設置循環並測試值,而不用硬編碼鍵的名稱。
再次不確定是否可以使用,因為我的PC上沒有設置測試方案,但是像這樣嗎?
foreach (var col in dataRow.ItemArray)
{
if(DBNull.Value != col)
lbl.Text = col.ToString()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.