Ra khỏi tò mò tôi muốn biết làm thế nào để thực hiện tốt nhất một lớp học mà có thể được sử dụng để tránh những cảnh báo CA1006Làm thế nào để thực hiện chung IEnumerable hoặc IDictionary để tránh CA1006?
CA1006: Microsoft.Design: Xem xét một thiết kế nơi 'IReader.Query (String, String) 'không tổ chung loại' IList (Of IDictionary (Of String, Object)) '.
Đây là phương pháp mà trả về kiểu generic
public virtual IList<IDictionary<string, object>> Query(
string fullFileName,
string sheetName)
{
using (var connection = new OdbcConnection(
this.GetOdbcConnectionString(fullFileName)))
{
connection.Open();
return connection
.Query(string.Format(
CultureInfo.InvariantCulture,
SystemResources.ExcelReader_Query_select_top_128___from__0_,
sheetName))
.Cast<IDictionary<string, object>>()
.ToList();
}
}
Something như
SourceData<T, U> Query(string fullFileName, string sheetName)
SourceData Query(string fullFileName, string sheetName)
EDIT:
Tiếp theo gợi ý của Marc tôi đóng gói các generic lồng nhau trong lớp này
public class QueryRow : List<KeyValuePair<string, object>>
{
protected internal QueryRow(IEnumerable<KeyValuePair<string, object>> dictionary)
{
this.AddRange(dictionary.Select(kvp => kvp));
}
}
ý định của danh sách từ điển ở đây là gì? là các hàng, với các giá trị được khóa (tức là các ô được truy cập theo tên cột)? –
mỗi từ điển là một hàng mà mỗi khóa là tiêu đề cột và giá trị là giá trị ô – mrt181
Thay cho '.Cast', bạn có thể không sử dụng' .ToDictionary' không? – IAbstract