Por curiosidad me gustaría saber cómo implementar mejor una clase que podría ser utilizado para evitar la advertencia CA1006¿Cómo implementar IEnumerable genérico o IDictionary para evitar CA1006?
CA1006: Microsoft.Design: Considere un diseño donde 'IReader.Query (String, String) 'no anida el tipo genérico' IList (Of IDictionary (Of String, Object)) '.
Este es el método que devuelve el tipo genérico
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();
}
}
Algo así como
SourceData<T, U> Query(string fullFileName, string sheetName)
SourceData Query(string fullFileName, string sheetName)
EDIT:
Siguiendo las sugerencias de Marc I encapsulado genérico anidada en esta clase
public class QueryRow : List<KeyValuePair<string, object>>
{
protected internal QueryRow(IEnumerable<KeyValuePair<string, object>> dictionary)
{
this.AddRange(dictionary.Select(kvp => kvp));
}
}
¿Cuál es la intención de la lista de diccionarios aquí? es esa filas, con valores clave (es decir, las celdas se accede por nombre de columna)? –
cada diccionario es una fila donde cada clave es el encabezado de columna y el valor es el valor de celda – mrt181
En lugar de '.Cast', ¿no puede usar' .ToDictionary'? – IAbstract