문제

현재 Convert.s를 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 };

내가 한 일에 대한 생각, 의견, 대안이 있습니까?

도움이 되었습니까?

해결책

확장 방법을 작성하십시오.

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);
}
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; });
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top