Impossible de convertir l'expression lambda en type 'objet' car ce n'est pas un type de délégué
J'ai une classe de base qui a un bool propriété qui ressemble à ceci:
public abstract class MyBaseClass
{
public bool InProgress { get; protected set; }
}
J'hérite d'une autre classe et d'essayer d'ajouter en cours en tant que délégué au dictionnaire. Mais il me lance une erreur. C'est ainsi que ma classe Dérivée ressemble:
public abstract class MyClass
{
Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("InProgress", InProgress => base.InProgress = InProgress);
}
C'est l'erreur que j'obtiens:
Ne peut pas convertir lambda expression de type "objet", car il n'est pas un type délégué
Ce que je fais mal?
source d'informationauteur Asdfg
Vous devez vous connecter pour publier un commentaire.
Le mieux serait d'avoir le dictionnaire fortement typé, mais si vous affectez le lambda spécifiques à une lambda (délégué) tout d'abord, il doit travailler (parce que le compilateur sait alors le délégué format):
Ou par moulage directement, même effet
Bien sûr, d'avoir un tel dictionnaire format que l'objet est en confrontant, car vous aurez à savoir le délégué format pour pouvoir l'utiliser.
J'ai eu cette erreur lorsque j'ai été absent
Bien que la solution par @Me.Nom est tout à fait valable, par lui-même, il y a une astuce supplémentaire qui peut être utile dans certaines situations (il n'a certainement pour moi): si vous êtes à la conversion de plusieurs lambdas en utilisant cette technique, vous pouvez le facteur de la distribution comme une méthode d'aide, le long des lignes de
et ensuite l'appeler simplement
Il peut vous faire économiser temps plus tard - si vous décidez de changer de changer les signatures, vous aurez à faire à un seul endroit.
J'ai rencontré ce problème lors de l'écriture de tests unitaires. J'ai été de tenter de simuler le comportement d'une base de données de retour d'un nouvel objet à partir d'un référentiel au lieu de se connecter à une base de données.
Assurez-vous que votre objet utilisable constructeur. Vous ne pouvez pas être en mesure d'instancier cet objet, de la manière que vous voulez. S'assurer si vous utilisez un lambda à point à un constructeur que le constructeur peut être appelé de la même façon dans des conditions normales d'instanciation d'instruction.
c'est à dire
dire que dans le cas de
ne serait pas alors le lambda ne pourra pas non plus faire attention.