4

現在、Convert.To を TryParse に置き換えるコードをリファクタリングしています。

プロパティを作成してオブジェクトに割り当てる次のコードを見つけました。

List<Person> list = new List<Person>();

foreach (DataRow row in dt.Rows)
{
     var p = new Person{ RecordID = Convert.ToInt32(row["ContactID"]) };

     list.Add(p);
}

代わりに私が思いついたのは次のとおりです。

var p = new Person { RecordID = Int32.TryParse(row["ContactID"].ToString(), out RecordID) ? RecordID : RecordID };

私が行ったことに対する考え、意見、代替案はありますか?

4

4 に答える 4

9

拡張メソッドを書きます。

public static Int32? ParseInt32(this string str) {
    Int32 k;
    if(Int32.TryParse(str, out k))
        return k;
    return null;
}
于 2008-11-12T14:24:17.417 に答える
2

TryParseを返す代替実装を使用しint?ます。

public static int? TryParseInt32(string x)
{
    int value;
    return int.TryParse(x, out value) ? value : (int?) null;
}

次に、次のように記述できます。

var p = new Person { RecordID = Helpers.TryParseInt32(row["ContactID"].ToString()) ?? 0 };

(または、必要に応じて別のデフォルト値を使用します。どちらの方法でも、コードで表示されます。)

于 2008-11-12T14:24:47.463 に答える
0

TryParse 部分を初期化子から分離することをお勧めします。より読みやすくなります。

int recordId;
Int32.TryParse(row["ContactID"].ToString(), out recordID)

foreach (DataRow row in dt.Rows)
{
     var p = new Person{ RecordID = recordId };
     list.Add(p);
}
于 2008-11-12T14:28:58.827 に答える