Question

Je suis en train de refactoriser le code pour remplacer Convert.To en TryParse.

J'ai rencontré le code suivant, qui crée et attribue une propriété à un objet.

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

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

     list.Add(p);
}

Voici ce que je propose en remplacement:

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

Avez-vous des idées, des opinions ou des alternatives à ce que j'ai fait?

Était-ce utile?

La solution

Écrire une méthode d'extension.

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

Autres conseils

J'utiliserais une autre implémentation TryParse qui renvoie un int? :

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

Ensuite, vous pouvez écrire:

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

(Ou utilisez une valeur par défaut différente, si vous le souhaitez - de toute façon, cela sera visible dans votre code.)

Je suggère de séparer la partie TryParse de l'initialiseur. Ce sera plus lisible.

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

foreach (DataRow row in dt.Rows)
{
     var p = new Person{ RecordID = recordId };
     list.Add(p);
}
private static void TryToDecimal(string str, Action<decimal> action)
{
        if (decimal.TryParse(str, out decimal ret))
        {
            action(ret);
        }
        else
        {
            //do something you want
        }
}

TryToDecimal(strList[5], (x) => { st.LastTradePrice = x; });
TryToDecimal(strList[3], (x) => { st.LastClosedPrice = x; });
TryToDecimal(strList[6], (x) => { st.TopPrice = x; });
TryToDecimal(strList[7], (x) => { st.BottomPrice = x; });
TryToDecimal(strList[10], (x) => { st.PriceChange = x; });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top