Forums Neueste Beiträge
 

(mein) C# spinnt bei generischen Extensionmethods und "where"

08/05/2009 - 17:29 von Markus Springweiler | Report spam
Hallo,

gegeben:
public class Animal {
public string AnimalProp {get; set;}
}

public class DeadThing {
public string ThingProp {get; set;}
}

public static class AnimalExtensions
{
public static void DoSomeMagic<T, T2>(this T source, Expression<Func<T, T2>> lambda)
where T: Animal
{ }
}

public static class DeadThingExtensions
{
public static void DoSomeMagic<T, T2>(this T source, Expression<Func<T, T2>> lambda)
where T: DeadThing
{ }
}

Wenn ich das jetzt verwende:
void Main()
{
var animal = new Animal();
var deadThing = new DeadThing();

animal.DoSomeMagic(ani => ani.AnimalProp);
deadThing.DoSomeMagic(thing => thing.ThingProp);
}

Dann funktioniert IntelliSense einwandfrei, aber der Compiler meckert bei
"animal.DoSomeMagic(ani => ani.AnimalProp);" mit:

Der Aufruf unterscheidet nicht eindeutig zwischen folgenden Methoden und
Eigenschaften: "AnimalExtensions.DoSomeMagic<Animal,string>(Animal,
System.Linq.Expressions.Expression<System.Func<Animal,string>>)" und
"DeadThingExtensions.DoSomeMagic<Animal,string>(Animal,
System.Linq.Expressions.Expression<System.Func<Animal,string>>)"

("Goto Definition" geht auch zur falschen Methode.)

Bug? Feature? Mein Fehler?

/\/\arkus.
 

Lesen sie die antworten

#1 Stefan Hoffmann
08/05/2009 - 19:34 | Warnen spam
hallo Markus,

Markus Springweiler schrieb:
public static class AnimalExtensions
{
public static void DoSomeMagic<T, T2>(this T source, Expression<Func<T, T2>> lambda)
where T: Animal
{ }
}
Bug? Feature? Mein Fehler?


Siehe:

http://msdn.microsoft.com/en-us/lib...83977.aspx

Es sollte also so aussehen:

public static class AnimalExtension
{
public static void DoSomeMaigc<T>(
this Animal source, Expression<Func<Animal, T>> lambda)
{
}
}


mfG

Ähnliche fragen