객체 속성 값을 설정하기 위해 tryparse를 사용합니다
-
08-07-2019 - |
문제
현재 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; });
제휴하지 않습니다 StackOverflow