मैं कुछ विस्तार तरीकों कि एक अभिव्यक्ति पैरामीटर का उपयोग एक संपत्ति सदस्य है और इस पर कार्य में खींचने के लिए है, और मुझे विशेष मामले के लिए एक अधिभार जहां सदस्य एक IEnumerable है <>। हालांकि, से नीचे आर 4 के लिए जेनेरिक क्लास () के अंदर से कॉल किए जाने पर अपेक्षित विधि अधिभार से मेल नहीं लगता है। कक्षा के बाहर सही विधि का चयन किया जाता है।एक्सटेंशन विधि चयन सामान्य प्रकार और का उपयोग कर भाव
यहां क्या हो रहा है? क्या यह कभी काम करेगा या मुझे एक नया दृष्टिकोण खोजने की ज़रूरत है?
public class Test
{
public void MyTest()
{
// returns "Object"
var r1 = new MyClass<object>().Ext(a => a.Content);
// returns "Enumerable"
var r2 = new MyClass<IEnumerable<object>>().Ext(a => a.Content);
// returns "Object"
var r3 = new MyClass<object>().TestExt();
// returns "Object" (I was expecting "Enumerable")
var r4 = new MyClass<IEnumerable<object>>().TestExt();
// returns "Enumerable"
var r5 = new MyClass<int>().TestExt2();
}
}
public class MyClass<T>
{
public T Content { get; set; }
public IEnumerable<object> OtherContent { get; set; }
public string TestExt()
{
return this.Ext(a => a.Content);
}
public string TestExt2()
{
return this.Ext(a => a.OtherContent);
}
}
public static class MyExtensions
{
public static string Ext<T>(this T obj, Expression<Func<T, IEnumerable<object>>> memberExpression)
{
return "Enumerable";
}
public static string Ext<T>(this T obj, Expression<Func<T, object>> memberExpression)
{
return "Object";
}
}
यहां क्या गलत है? –
@ किंगिंगकिंग 'आर 4' की घोषणा के बगल में टिप्पणी देखें –