पर कास्ट पैरामीटर मैं किसी विशिष्ट प्रकार का एक विशिष्ट गुण के लिए गेटर फ़ंक्शन "लपेटना" चाहता हूं। मैं एक अमूर्त वर्ग, जैसे परिभाषित किया गया है निम्नलिखित:लैम्ब्डा अभिव्यक्ति: आधार प्रकार
public abstract class MyConcreteClass : MyAbstractClass<MyConcreteType>
{
// ...
}
और अब, सहायक विधि है कि एक आवरण लौटना चाहिए:
public abstract class MyAbstractClass<T> where T : MyType
{
// ...
}
ठीक है, मैं के बाद एक तरह एक ठोस वर्ग है लगता है
private Func<MyAbstractClass<T>, Object> GetPropertyGetter(PropertyInfo property)
{
var instanceType = Expression.Parameter(property.DeclaringType, "i");
// Taking getter's "body".
var getterBody = Expression.Property(instanceType, property);
// Cast to a generic Object.
var body = Expression.TypeAs(getterBody, typeof(Object));
// Build the expression.
var exp = Expression.Lambda<Func<MyAbstractClass<T>, Object>>(body, instanceType);
return exp.Compile();
}
की उम्मीद वैसे ही जैसे निम्न अपवादों मैं:
गेटर विधि के लिएपैरामीटर का प्रकार 'MyConcreteClass' का उपयोग के लिए 'MyAbstractClass <MyConcreteType>' के प्रतिनिधि पैरामीटर के लिए नहीं किया जा सकता है।
क्या इस तरह के कास्टिंग को "मजबूर" करने का कोई तरीका है? अग्रिम में धन्यवाद।
यह प्रश्न बेहद भ्रमित है। "MyConcreteClass" नामक एक अमूर्त वर्ग क्यों है। "कंक्रीट" और "अमूर्त" विरोधी हैं; क्या यह जानबूझकर भ्रमित करने का इरादा है? क्या दो "टी" समान हैं, या दो अलग-अलग वर्गों में टी की दो अलग-अलग घोषणाएं हैं? आप इस अजीब चीज़ को पहली जगह क्यों करने की कोशिश कर रहे हैं? –