簡體   English   中英

如果\\其他,效率更高?

[英]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 );

我還沒有這么多的嘗試,但有一個ItemArrayDataRow類將返回該項目的一個對象數組DataRow 可能能夠以這種方式設置循環並測試值,而不用硬編碼鍵的名稱。

再次不確定是否可以使用,因為我的PC上沒有設置測試方案,但是像這樣嗎?

foreach (var col in dataRow.ItemArray)
{
    if(DBNull.Value != col)
        lbl.Text = col.ToString()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM