Erweiterungsmethoden für Indexer, wären sie gut?Erweiterungsmethoden für Indexer, wären sie gut?
Ich spielte mit etwas Code, der POCO's hydratisiert.
Der Code iteriert Zeilen, die von einem SqlDataReader zurückgegeben werden, und verwendet Reflektion, um Eigenschaften aus Spaltenwerten zuzuweisen. In meinem Callstack hatte ich einen Code wie folgt:
Die Set-Methode wurde als eine Erweiterungsmethode geschrieben.
Es wäre toll, in der Lage gewesen, Code zu schreiben, wie diese
poco["Surname"] = "Smith"; // extension methods for indexers ?
dh ich eine Erweiterungsmethode für Indexer
Gibt es guten Grund schreiben wollte, warum .Net nicht Erweiterungsmethoden hat für Indexer? Haben andere Personen andere nützliche Anwendungen für Indexer für Erweiterungsmethoden?
als beiseite ... Wenn wir Erweiterungsmethoden für Indexer schreiben könnte dann könnten wir Code wie diesen schreiben ...
var poco = PocoFactory();
poco.Surname = “Smith”; // is this JavaScript ...
poco[Surname] = “Smith” ; // … or is this c# or both
Einige Auszüge aus meinem Code
/////////////////////////////////////////////
// Client calling code
IDab dab = DabFactory.Create("Northwind");
string sql = @"select * from Customers ";
var persons = dab.ExecuteReader<NorthwindCustomer>(sql);
if (dab != null{
Assert.That(persons[0].CustomerID , Is.EqualTo("ALFKI"));}
/////////////////////////////////////////////
List<T> IDab.ExecuteReader<T>(string commandText)
{
List<T> pocos = new List<T>();
// setup connection
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
Dictionary<string, int> colMappings = null ;
if (colMappings == null){
colMappings = reader.GetSqlDataReaderColumnMappings();}
T poco = new T();
poco.DbToMem<T>(reader, colMappings);
pocos.Add(poco);
}
}
// connection cleanup ...
return pocos ;
}
// the set extension method signature
public static void Set<T>(this T thisClientObject, string thisPropertyName, object newValue) where T : class
interessanten Dank, ich werde es mir ansehen. – judek