Per curiosità vorrei sapere come implementare meglio una classe che potrebbe essere utilizzato per evitare l'avviso CA1006Come implementare IEnumerable o IDictionary generico per evitare CA1006?
CA1006: Microsoft.Design: Si consideri un disegno in cui 'IReader.Query (String, String) 'non annida il tipo generico' IList (Of IDictionary (Of String, Object)) '.
questo è il metodo che restituisce il tipo generico
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();
}
}
Qualcosa di simile
SourceData<T, U> Query(string fullFileName, string sheetName)
SourceData Query(string fullFileName, string sheetName)
EDIT:
Seguendo i suggerimenti di Marc ho incapsulato il generico nidificato in questa classe
public class QueryRow : List<KeyValuePair<string, object>>
{
protected internal QueryRow(IEnumerable<KeyValuePair<string, object>> dictionary)
{
this.AddRange(dictionary.Select(kvp => kvp));
}
}
qual è l'intento della lista di dizionari qui? Quelle righe sono, con valori con chiave (vale a dire le celle accessibili per nome colonna)? –
ogni dizionario è una riga dove ogni chiave è l'intestazione della colonna e il valore è il valore della cella – mrt181
Al posto di '.Cast' non si può usare' .ToDictionary'? – IAbstract