Je vais avoir un peu de mal à comprendre quel est le problème ici. J'ai un peu de code qui tire des enregistrements d'une base de données en utilisant LINQ et les met dans un objet qui est jeté dans une interface. Il ressemble un peu à ceci:
public IEnumerable<ISomeObject> query()
{
return from a in dc.SomeTable
select new SomeObject
{
//Assign various members here
} as ISomeObject;
}
Quand j'ai tester, j'ai mis de l'interface IEnumerable retournée dans une variable appelée les résultats et de les exécuter cette ligne:
Assert.AreEqual(EXPECTED_COUNT, results.Count());
Lorsque cela est géré, je reçois un Système.De sécurité.VerificationException: "l'Opération pourrait déstabiliser le moteur d'exécution."
J'ai trouvé la solution ici, qui est-ce:
var results = from a in dc.SomeTable
select new SomeObject
{
//Assign various members here
} as ISomeTable;
return results.OfType<ISomeObject>();
Cela fonctionne, mais je vais avoir du mal à comprendre ce qui se passe ici. Pourquoi ai-je l'exception, en premier lieu, et comment les lignes de code ci-dessus résoudre ce problème? La documentation MSDN semble suggérer que c'est une question de sécurité de type, mais je ne vois pas où le code précédent était de type dangereux.
Mise à JOUR Un peu plus d'information j'ai trouvé. Le premier exemple fonctionne si je fais le type de retour IQueryable. Cela met un peu plus de lumière sur ce qui n'allait pas, mais je suis toujours confus au sujet de la pourquoi. Pourquoi ne pas le compilateur me forcer à lancer l'interface IEnumerable dans un IQueryable?