1

この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
4

10 に答える 10

12

ifあなたは完全に取り除くことができます。

DBNull.Value.ToString()空の文字列を返します。

于 2013-01-10T15:54:03.647 に答える
4

あなたができる

lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;

上記のステートメントは必要な行数が少なく、私には読みやすく見えます。

于 2013-01-10T15:55:46.530 に答える
1

この種の繰り返しが見られる場合の経験則として、処理を実行する関数を記述します。

string FormatIt(object value) 
{
   return value.ToString(); // or whatever the logic is like
}

それで:

lblOldNumber.Text = FormatIt(dr["OLD_NUMBER"]);

したがって、そのようなお金やsmthをフォーマットするためにコードを変更する必要がある場合は、変更する場所が1つあります。

于 2013-01-10T15:58:31.483 に答える
1
lblOldNumber.Text = string.Empty;
if (dr["OLD_NUMBER"] != DBNull.Value)
{
    lblOldNumber.Text = dr["OLD_NUMBER"].ToString();
}

またはあなたはカムメイク機能のように

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);
于 2013-01-10T15:54:10.413 に答える
1

次を使用できます。

lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;

ifの代わりに?:演算子の詳細については、次を参照してください:(C#リファレンス)

于 2013-01-10T15:55:10.443 に答える
1

このようなもの:

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();
        }
于 2013-01-10T16:01:59.030 に答える
0

データベースにクエリを実行するときに、データセットからnull値を削除できます。

var result = (context.MyTable.Where(c => c.OLD_NUMBER != null));
于 2013-01-10T15:56:26.733 に答える
0

私はおそらくメソッドを書くでしょう:

void TextOrNull(object item, Label lbl)
{
  lbl.Text = item != DBNull.Value ? item.ToString() : String.Empty;
}

そしてそれを次のように呼びます:

TextOrNull(dr["OLD_NUMBER"], lblOldNumber);
于 2013-01-10T15:59:30.517 に答える
0

これを含むメソッドを次のように作成します。

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 );
于 2013-01-10T15:59:42.170 に答える
0

私はこれほど実験していませんが、クラス内にアイテムのオブジェクト配列を返すItemArrayonがあります。キーの名前をハードコーディングするのではなく、ループを設定して値をテストできる可能性があります。DataRowDataRow

PCにテストシナリオを設定していないので、これが機能するかどうかはわかりませんが、このようになりますか?

foreach (var col in dataRow.ItemArray)
{
    if(DBNull.Value != col)
        lbl.Text = col.ToString()
}
于 2013-01-10T16:05:54.233 に答える