मैं इस परिदृश्य के साथ एक सामान्य विधि कॉलिंग:सही व्युत्पन्न प्रकार
मैं तीन श्रेणियां होती हैं, उन्हें A
, B
और C
फोन करते हैं। उनके पास आम बात यह है कि वे एक ही इंटरफ़ेस, ISomeInterface
से प्राप्त होते हैं और वे कक्षाएं हैं जो इकाई फ्रेमवर्क का उपयोग करके इकाइयों में मैप की जाती हैं।
मेरे पास एक ऐसी विधि है जिसने इस इंटरफ़ेस को लागू करने वाली वस्तुओं की एक सूची प्राप्त की है, लेकिन ऑब्जेक्ट्स स्वयं A
, B
या C
के उदाहरण होंगे।
विधि खोल इस
public void MyMethod(List<ISomeInterface> entityList)
{
foreach(var entity in entityList)
{
ProcessEntity(entity);
}
}
तरह लग रहा है अब, समस्या ProcessEntity
विधि के साथ है। यह एक सामान्य विधि, प्रकार या संस्था के अनुसार डेटाबेस से मिलान तत्वों की तालिका को पुनः प्राप्त करने की जरूरत है, तो यह इस तरह दिखता है:
public void ProcessEntity<T>(T entity)
{
using(var repository = new DbRepository())
{
var set = repository.Set<T>();
...
}
}
समस्या यह है कि लाइन var set = repository.Set<T>();
विफल रहता है क्योंकि T
ISomeInterface
है इस मामले में, और वास्तविक प्रकार (A
, B
या C
) नहीं, इसलिए यह एक अपवाद देता है जो दिए गए प्रकार से संबंधित नहीं हो सकता है, जो समझ में आता है।
तो मेरा सवाल यह है कि: मैं सूची के अंदर वस्तु के वास्तविक प्रकार के साथ ProcessEntity को कैसे कॉल कर सकता हूं, न कि इंटरफ़ेसटाइप जो वे लागू करते हैं।
कि चाल किया था इस्तेमाल कर सकते हैं। मैं 'ProcessEntity (obj);' 'ProcessEntity (गतिशील के रूप में obj); ', और यह ठीक काम करता है। गतिशील के लिए एक उपयोग के बारे में पता नहीं था।बहुत बहुत धन्यवाद :) –
@ ØyvindKnobloch-Bråthen yep, मुझे यह रन-टाइम टाइपिफिकेशन बहुत पसंद है –