je le code suivant:Comment faire le type d'expression lamba le type de classe dérivée d'une classe de base générique
public abstract class EntityMapperBase<T>
{
protected void Map(string columnName, Func<EntityMapperBase<T>, object> func)
{
_mappings.Add(columnName, func);
}
protected object GetValueForColumn(string columnName)
{
return _mapping[columnName](this);
}
}
public class PersonMap: EntityMapperBase<PersonMap>
{
public string Name { get; set; }
public PersonMap()
{
Map(x => ((PersonMap)x).Name);
}
}
Je ne voudrais idéalement pas avoir à jeter x
à la classe PersonMap
.
Comment puis-je y parvenir?
Supposons que 'T' est' chaîne'. Vous acceptez un 'Func'. Pourquoi voudriez-vous être capable d'appeler cela en passant dans un 'Base '? Peut-être que votre paramètre devrait être 'Func , objet>'? Qu'essayez-vous d'accomplir? C'est un peu un problème X-Y en ce moment. –
J'essaie d'accéder aux propriétés de la classe dérivée dans la fonction. Comme 'Test (x => x.Name)'. x va être 'Base' et ensuite besoin de lancer x en T, en essayant d'empêcher cela. –
adriaanp
Peut-être que votre méthode doit aussi être générique? Malheureusement, comme je l'ai déjà dit, vous ne nous avez pas dit ce que vous essayez de faire, alors nous ne pouvons pas vraiment vous aider. –