Das Objekt des Typs 'System.Linq.Expressions.UnaryExpression' konnte nicht in den Typ 'System.Linq.Expressions.MemberExpression' umgewandelt werden.
Erstellte ich eine Methode in C# zu bekommen methodname
public string GetCorrectPropertyName<T>(Expression<Func<T, string>> expression)
{
return ((MemberExpression)expression.Body).Member.Name; //Failure Point
}
und nannte es als
string lcl_name = false;
public string Name
{
get { return lcl_name ; }
set
{
lcl_name = value;
OnPropertyChanged(GetCorrectPropertyName<ThisClassName>(x => x.Name));
}
}
Dies funktioniert gut, wenn die Eigenschaft "string", und für alle anderen Typen gibt diese Ausnahme:
Unable to cast object of type 'System.Linq -.Ausdrücke.UnaryExpression' type 'System.Linq -.Ausdrücke.MemberExpression'.
- Ich geändert-string zu object in der Signatur der Methode, aber dann scheitert es wieder.
- Änderte ich den Aufruf von
x => x.PropertyName
zux => Convert.ToString(x.PropertyName)
und es immer noch nicht
Wo bin ich falsch?
InformationsquelleAutor der Frage Nikhil Agrawal | 2012-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie eine separate Zeile zu extrahieren, das Mitglied, in dem die Eingabe-Ausdruck Unärer Ausdruck.
Einfach konvertiert diese aus VB.Net also möglicherweise etwas off - lasst mich wissen, wenn ich brauche, um alle minor tweaks:
Die VB-version ist:
Beachten Sie, dass die Eingabe Ausdruck nicht wieder string-unbedingt - das schränkt Sie nur-Lesen-Eigenschaften, die Zeichenfolgen zurückgeben.
InformationsquelleAutor der Antwort Jon Egerton
Dies ist offenbar Bezug auf boxing/unboxing. Lambda-Ausdrücke Rückgabe Wert-Typen, die verlangen, dass Boxen dargestellt UnaryExpressions in der Erwägung, dass diejenigen, die zurückkehren Referenz-Typen werden dargestellt als MemberExpressions.
InformationsquelleAutor der Antwort Scott Munro
Nachdem diese Frage(ja, ich bin OP) bekam ich Kommentare auf Frage von Jon
und ich kam mit dieser
InformationsquelleAutor der Antwort Nikhil Agrawal