Использование TryParse для задания значений свойств объекта


Я в настоящее время рефакторинга кода, чтобы заменить преобразования.Для того, чтобы метод 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 };
Какие-нибудь мысли, мнения, альтернативы тому, что я сделал?
3 4

3 ответа:

Напишите метод расширения.

public static Int32? ParseInt32(this string str) {
    Int32 k;
    if(Int32.TryParse(str, out k))
        return k;
    return null;
}

Я бы использовал альтернативную реализацию 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 };

(или используйте другое значение по умолчанию, если хотите - в любом случае оно будет видно в вашем коде.)

Я предлагаю отделить часть 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);
}