ich einige Erweiterungsmethoden, die eine Expression Parameter verwenden, in einer Eigenschaft Mitglied und wirken auf sie zu ziehen, und ich habe eine Überlastung für den speziellen Fall, in dem das Element ein IEnumerable <>. Es scheint jedoch nicht die erwartete Methodenüberladung zu entsprechen, wenn sie innerhalb einer generischen Klasse aufgerufen wird (für r4 unter). Außerhalb der Klasse wird die richtige Methode ausgewählt.Erweiterung Methodenauswahl unter Verwendung von generischen Typen und Ausdrücke
Was geht hier vor? Wird das jemals funktionieren oder muss ich einen neuen Ansatz finden?
(Dies ist in C# 5)
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";
}
}
Was ist hier falsch? –
@KingKing Siehe den Kommentar neben der Erklärung von 'r4' –