CA1006을 피하기 위해 일반 IEnumerable 또는 IDictionary를 구현하는 방법은 무엇입니까?

c# dapper fxcop generics ienumerable

문제

호기심에서 CA1006 경고를 피하기 위해 사용할 수있는 클래스를 가장 잘 구현하는 방법을 알고 싶습니다.

CA1006 : Microsoft.Design : 'IReader.Query (String, String)'가 제네릭 형식 'IList (IDictionary (Of String, Object))'을 중첩하지 않는 디자인을 고려하십시오.

이것은 제네릭 형식을 반환하는 메서드입니다.

SourceData<T, U> Query(string fullFileName, string sheetName)
SourceData Query(string fullFileName, string sheetName)

좋아하는 것

SourceData<T, U> Query(string fullFileName, string sheetName)
SourceData Query(string fullFileName, string sheetName)

편집하다:

Marc의 제안에 따라이 클래스에 중첩 된 제네릭을 캡슐화했습니다.

SourceData<T, U> Query(string fullFileName, string sheetName)
SourceData Query(string fullFileName, string sheetName)

수락 된 답변

첫째, 컴파일러 오류가 아니라 설계 지침 이라는 점에 유의하십시오. 하나의 유효한 접근법은 다음과 같습니다. 무시하십시오.

또 다른 것 - 그것을 캡슐화하십시오; 즉 QueryRowIDictionary<string,object> 의 얕은 래퍼 인 List<QueryRow> 반환합니다. 즉, 인덱서, 즉

var data = connection.Query(....)
        .Select(x => new QueryRow((IDictionary<string,object>)x).ToList()

그러면 dapper를 통해 액세스하므로 다음을 통해 채 웁니다.

var data = connection.Query(....)
        .Select(x => new QueryRow((IDictionary<string,object>)x).ToList()

또 다른 옵션 (나는별로 좋아하지 않는다)은 다음과 같다. return DataTable .

DataTable 을 입력 한 후 손을 씻으 러 간다 ... gah! 두 번 지금




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.