Phương pháp mở rộng cho Trình lập chỉ mục, chúng có tốt không?Phương pháp mở rộng cho người lập chỉ mục, liệu chúng có tốt không?
Tôi đang chơi xung quanh với một số mã có thể hydrat hóa POCO.
Mã lặp xung quanh các hàng được trả về từ SqlDataReader và sử dụng sự phản chiếu để gán các thuộc tính từ các giá trị cột. Xuống ngăn xếp cuộc gọi của tôi Tôi đã có một dòng mã như sau: -
poco.Set("Surname", "Smith"); // uses extension method ...
Phương thức thiết lập được viết dưới dạng phương pháp mở rộng.
Nó sẽ là tuyệt vời để có thể viết mã như thế này
poco["Surname"] = "Smith"; // extension methods for indexers ?
tức là tôi muốn viết một phương pháp mở rộng cho indexer
Có lý do chính đáng tại sao Net không có phương pháp khuyến nông cho người lập chỉ mục? Những người khác có sử dụng tốt cho các chỉ mục phương pháp mở rộng không?
như một sang một bên ... Nếu chúng ta có thể viết phương pháp khuyến nông cho indexers sau đó chúng ta có thể viết mã như thế này ...
var poco = PocoFactory();
poco.Surname = “Smith”; // is this JavaScript ...
poco[Surname] = “Smith” ; // … or is this c# or both
Một số đoạn từ mã của tôi
/////////////////////////////////////////////
// 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
cảm ơn thú vị, tôi sẽ xem xét. – judek