सूचकांक के लिए एक्सटेंशन तरीके, क्या वे अच्छे होंगे?इंडेक्सर्स के लिए एक्सटेंशन तरीके, क्या वे अच्छे होंगे?
मैं कुछ कोड के साथ खेल रहा था जो पीओसीओ को फिर से हाइड्रेट करता है।
कोड एसक्लडाटा रीडर से लौटाई गई पंक्तियों के आसपास पुनरावृत्त करता है और कॉलम मानों से गुणों को असाइन करने के लिए प्रतिबिंब का उपयोग करता है। मेरे कॉल स्टैक के नीचे मेरे पास एक कोड था: -
poco.Set("Surname", "Smith"); // uses extension method ...
सेट विधि को एक्सटेंशन विधि के रूप में लिखा गया था।
यह बहुत अच्छा होगा इस
poco["Surname"] = "Smith"; // extension methods for indexers ?
यानी मैं इंडेक्सर के लिए एक विस्तार विधि
वहाँ अच्छा कारण नेट विस्तार विधियां नहीं हैं लिखना चाहते थे की तरह कोड लिखने में सक्षम किया गया है सूचकांक के लिए? क्या अन्य लोगों के पास विस्तार विधि अनुक्रमणकों के लिए अन्य अच्छे उपयोग हैं?
एक अलग रूप में के रूप में ... हम indexers के लिए विस्तार तरीकों तो हम इस तरह कोड लिख सकता है लिख सकता है ...
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