2008-11-12 7 views
3

현재 변환을 대체 할 코드를 리팩터링하고 있습니다. TryParse를 사용합니다.TryParse를 사용하여 객체 속성 값 설정

개체에 속성을 만들고 할당하는 다음 코드를 보았습니다. 내가 무슨 짓을했는지에

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

어떤 생각, 의견, 대안 : 나는 대체 그대로을 마련했습니다 무엇

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

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

    list.Add(p); 
} 

?

+0

읽을 수는 없지만 작동하는 경우 ...... – DilbertDave

+0

나는 Dilbert에 동의합니다. 한 줄짜리 기사는 읽기가 더 어려우며 편집을 시도하거나 디버깅을 단계별로 수행하는 것이 고통 스럽습니다. TryParse는 개선 된 것처럼 들립니다. – DOK

+0

ContactID는 데이터베이스의 기본 키이므로 Int32 로의 변환은 항상 성공합니다. TryParse의 사용은 코드의 관리자에게 오해의 소지가 있습니다. 변환이 때때로 실패 할 수 있다는 것을 의미하기 때문에 그렇습니다. 나는 Convert.ToInt32를 고집 할 것이다. –

답변

6

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

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

당신이 쓸 수 있습니다 :

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

원래 기능과 일치하도록 false 인 경우 null 대신 0을 반환하지 않겠습니까? – Godless667

+0

이 경우 구문 분석에 실패 (null이 반환 됨)와 구문 분석 0 (0이 반환 됨) 사이에 차이가 있어야하기 때문입니다. – xsl

+0

@Godless 아니요. 재사용 할 수있는 일반적인 것을 원할 것입니다. 기본값을 0으로 설정해야하는 경우 ("1234".TryParseInt32()? 0)를 사용합니다. – yfeldblum

1

나는 int? 반환 대안 구현 TryParse을 사용하십시오

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

을 (또는 당신이 원하는 경우, 다른 기본 값을 사용 - 어떤 방법 으로든 코드에 표시됩니다.)

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); 
} 
+0

나는 그것도 생각했다. (당신은 foreach 블록 안에 그 부분을 넣을 필요가있다.) 나는 더 간결한 코드를 찾으려고했습니다. 특히 개체를 만드는 동안 여러 속성을 설정하는 경우 – Godless667

+0

DataRow를 가져 와서 원하는대로 할 수있는 Person의 생성자를 만드는 것이 어떻습니까? –

+0

Person 클래스가 ODBC 및 ADO.NET을 통한 관계형 데이터베이스 지속성의 의미를 이해해야하는 이유는 무엇입니까? 바이너리 네트워크 스트림에서 자체를 구성하는 방법을 이해해야합니까? CSV 파일에서? 기타? – yfeldblum

관련 문제