インデクサーの拡張メソッド、彼らは良いでしょうか?インデクサーの拡張メソッド、彼らは良いだろうか?
私はPOCOを再水和するいくつかのコードで遊んでいました。
このコードは、SqlDataReaderから返された行を反復処理し、リフレクションを使用して列の値からプロパティを割り当てます。私のコールスタックの下に私は次のようなコードを持っていました: -
poco.Set("Surname", "Smith"); // uses extension method ...
Setメソッドは拡張メソッドとして書かれています。
私は、インデクサ
ための拡張メソッドを書きたかったこの
poco["Surname"] = "Smith"; // extension methods for indexers ?
すなわち.NETは拡張メソッドを持っていない理由はそこに正当な理由はありますようにコードを書くことができたのは素晴らしいことでしょうインデクサーのために? 他の人が、拡張メソッドインデクサーの他の優れた用途を持っていますか?さておき... 私たちはインデクサーのための拡張メソッドを書くことができれば、我々はこのようなコードを書くことができよう
...
var poco = PocoFactory();
poco.Surname = “Smith”; // is this JavaScript ...
poco[Surname] = “Smith” ; // … or is this c# or both
私のコードから一部抜粋が
/////////////////////////////////////////////
// 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
面白いおかげで、私は見ていきます。 – judek