2011-08-25 5 views
2

여기에 작은 문제가 있습니다. 나는 예외를 받고 오전 tempDT에 해당 값을 추가하려고하면 내가입력 문자열의 형식이 올바르지 않습니다.

string set1="123.10,134.40"; 
string set2="17,134"; 
List<string> List1 = new List<string>(set1.Split(',')); 
List<string> List2 = new List<string>(set2.Split(',')); 

var QueryResult = from D1 in List1 
        from E1 in List2 
        select new 
        { 
         D1, 
         E1 
        }; 
DataTable tempDT = new DataTable(); 
tempDT.Columns.Add("Data1", typeof(int)); 
tempDT.Columns.Add("Data2", typeof(string)); 

foreach (var item in QueryResult) 
{ 
    tempDT.Rows.Add(new object[] {Convert.ToInt32(item.E1.ToString()), 
    Convert.ToString(item.D1.ToString()) }); 
} 

를 다음 단계를 수행하려고 할 때 :

입력 문자열의 형식이 잘못되었습니다.

이 문제를 어떻게 해결합니까?

+0

'Convert.ToInt32'에서 올 가능성이 높습니다.'item.E1'은 어떻게 생겼습니까? 숫자로 변환 할 수있는 문자열입니까? 전체 스택 추적은 무엇입니까? –

+0

또한 E1과 D1은 이미 문자열이므로 ToString에 대한 호출은 필요하지 않습니다. –

+0

Int32로 변환하려고하면 "item.E1"의 값은 무엇입니까? –

답변

9

10 진수 문자가 들어있는 문자열에 Convert.ToInt32를 사용하고 있기 때문입니다.

+0

질문하지 않아도됩니다. 나는 그게 문제라고 확신한다. :) – leppie

+0

네가 맞다. :) 나는이 문제를 해결했다. \ – Pradeep

3

게시 한 코드가 정상적으로 작동하므로 실제 데이터에 문제가 있음을 의미합니다.

string set2="17,134,,20"; 

의미 빈 항목 코드를 충돌합니다 :

대부분의 경우, 당신은 이런 식으로 뭔가가있다. 와

제거 등의 빈 항목 :

List<string> List2 = new List<string>(set2.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)); 

그 오류 완전히 안전을 위해 대신 TryParse를 사용

int e1; 
foreach (var item in QueryResult) 
{ 
    if (Int32.TryParse(item.E1, out e1)) 
    { 
     tempDT.Rows.Add(new object[] { e1, item.D1 }); 
    } 
} 

이 단지 데이터에 추가하지, 유효하지 않은 값을 무시합니다 표.

관련 문제