2014-12-26 2 views
0

특정 DataRow에 특정 이름의 열이 있고 NULL이 아닌지 확인하는 다음 코드가 있습니다.DataRow를 처리하는 동안 순환 적 복잡성을 줄입니다.

private static bool HasValue(DataColumn c, DataRow row) 
{ 
    if (c != null && row != null && row[c.ColumnName] != System.DBNull.Value) 
    { 
     return true; 
    } 
    return false; 
} 

또한 datarow의 열을 처리하고 해당 데이터 유형으로 파싱합니다.

foreach (DataColumn c in row.Table.Columns) 
{ 
    switch (c.ColumnName) 
    { 
    case Constants.Literals.ACTIVATIONDATETIME: 
           if (HasValue(c, row)) 
           { 
            bFound = true; credentialInfo.ActivationDateTime = DateTimeOffset.Parse(Convert.ToString(row[c.ColumnName])); 
           } 
           break; 
    } 
} 

Visual Studio는 이것을 순환 적으로 복잡하게 나타냅니다. 이 기능에 대한 순환 지수를 줄이는 방법이 있습니까?

+1

모두 지우고 적절한 강하게 입력 된 데이터 모델을 사용하십시오. 그렇게하면 문자열 형식의 사전 대신 강력한 형식의 항목으로 작업하기 때문에 물건에 특정 이름이있는 다른 항목이 있는지 확인할 필요가 없습니다. –

답변

1

을 대신 row.Table.Columns 통해 반복의 찾아 테이블에 열을 포함하는 경우, 당신은이 작업을 수행 할 수 있습니다

var column = row.Table.Columns[Constants.Literals.ACTIVATIONDATETIME]; 
if(HasValue(column, row)) 
{ 
    //column found. 
} 

이렇게하면 루프와 스위치가 제거되어 함수의 순환 복잡성이 크게 줄어 듭니다.

1

당신은 단순히 체인과 문을 반환하여 복잡성을에게 약간을 줄일 수 :

private static bool HasValue(DataColumn c, DataRow row) 
{ 
    return c != null && row != null && row[c.ColumnName] != DBNull.Value; 
} 
관련 문제