DataRow 값을 사전 (columnName, expectedColumnValue)으로 제공된 예상 값과 비교하는 데이터베이스 테스트 유틸리티 코드를 작성했습니다.DataRow의 값과 Dictionary 개체의 비교
많은 형식에서는 잘 작동하지만 바이트와 짧은 경우 값을 Int32로 변환하는 변환 코드를 추가해야했습니다.
두 질문 :
는 어떻게이 코드가 더 나은, 즉 어떻게 변환을 방지 할 수 있도록하는 아이디어가 있습니까? 10 진수와 부동 소수점의 경우 10 진수/부동 소수점 값으로 명시 적으로 선언되었으므로 작동하는 것으로 보입니다. Long은 문제없이 작동합니다.
다른 방법이 없다면 걱정할 필요가있는 짧은 문자와 바이트 이외의 다른 유형이 있습니까? 아래
데모 코드 : 비교할 때
var table = new DataTable();
table.Columns.Add(new DataColumn("CarrierId", typeof(byte)));
table.Columns.Add(new DataColumn("NotationId", typeof(short)));
var row = table.NewRow();
row[0] = 5;
row[1] = 123;
table.Rows.Add(row);
var expected = new Dictionary<string, object>
{
{"CarrierId", 5},
{"NotationId", 123},
};
foreach (var entry in expected)
{
var value = row[entry.Key];
var expectedValue = entry.Value;
if (value is short || value is byte)
value = Convert.ToInt32(value);
Console.WriteLine();
Console.WriteLine(String.Format("Not converted: {0}", row[entry.Key].Equals(entry.Value)));
Console.WriteLine(String.Format("Converted (if applicable): {0}", value.Equals(expectedValue)));
}
강하게 입력 된 ['Row.Field'] (http://msdn.microsoft.com/en-us/library/bb360891.aspx) 확장 방법을 사용하십시오. –
전염병과 같은 데이터 세트/데이터 테이블/데이터row를 피하십시오. 사용자 정의 클래스와 ORM을 사용하십시오. :) – dumdum
@TimSchmelter : 최대한 단순하게 유지하기 위해 유형을 전달하지 않으려합니다. 그렇지 않으면 테스트가 필요한 모든 테이블의 코드를 변경해야합니다. –