Je reçois actuellement cette erreur d'un InvalidCastException
C#: Impossible de convertir type A au type B où A = B
[A]System.Data.Objects.ObjectResult`1[EDMXAssembly.ServiceStatus] cannot be cast to
[B]System.Data.Objects.ObjectResult`1[EDMXAssembly.ServiceStatus].
Type A originates from 'System.Data.Entity, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089' in the context 'Default' at location
'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll'.
Type B originates from 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the
context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089\System.Data.Entity.dll'.
long et laid!
J'utilise la réflexion pour appeler une méthode dans un assembly qui est chargé au moment de l'exécution. La méthode que j'appelle renvoie ObjectResult<T>
. L'erreur apparaît lorsque j'essaie d'afficher le résultat de l'invocation.
Je pense que cela est dû au fait que le moteur d'exécution contient une référence à System.Data.Entity, ainsi que l'assemblage qui effectue la réflexion et le moulage; Parce que ce sont deux références différentes, les types sont traités comme n'étant pas les mêmes. (À quelle distance suis-je là?)
Y at-il un moyen de contourner ce problème? La méthode que j'appelle est sur un ObjectContext
, donc je ne peux pas changer ce qu'il retourne.
Merci
Modifier pour extrait:
public QueryResultSet<T> ObjectQuery<T>(string dataContext, string functionName, List<ObjectParameter> functionParameters)
{
var context = htContexts[dataContext];
ObjectResult<T> qResult = (ObjectResult<T>)context.GetType().InvokeMember(functionName, BindingFlags.InvokeMethod, null, context, functionParameters.ToArray());
return qResult;
}
L'erreur occurrs sur la ligne qResult
(je suis juste se moquant ce vraiment rapidement au moment, où le manque d'try-catch)
Montrez-nous un extrait du code où vous invoquez la méthode. – IAbstract
Je suis sûr que votre analyse est correcte; Les types de deux charges différentes d'un assemblage sont considérés comme des types différents. – dlev
Avez-vous essayé d'utiliser le mot-clé var et d'accéder aux propriétés de la classe? var foo = myClass.results(); –