A operação poderia desestabilizar o tempo de execução?
Estou com um pouco de dificuldade para entender qual é o problema aqui. Eu tenho um pouco de código que extrai registros de um banco de dados usando LINQ e os coloca em um objeto que é convertido em uma interface. Parece um pouco com isso:
public IEnumerable<ISomeObject> query()
{
return from a in dc.SomeTable
select new SomeObject
{
//Assign various members here
} as ISomeObject;
}
Quando testei, coloquei o IEnumerable retornado em uma variável chamada results e execute esta linha:
Assert.AreEqual(EXPECTED_COUNT, results.Count());
Quando isso é executado, recebo uma System.Security.VerificationException: "A operação pode desestabilizar o tempo de execução."
Eu encontrei a soluçãoaqui, que é este:
var results = from a in dc.SomeTable
select new SomeObject
{
//Assign various members here
} as ISomeTable;
return results.OfType<ISomeObject>();
Isso funciona, mas estou tendo problemas para entender o que está acontecendo aqui. Por que recebi a exceção em primeiro lugar e como as linhas de código acima a corrigiram? A documentação do MSDN parece sugerir que esse é um problema de segurança de tipo, mas não estou vendo onde o código anterior era do tipo inseguro.
ATUALIZAR Um pouco mais de informação que eu descobri. O primeiro exemplo funciona se eu fizer o tipo de retorno IQueryable. Isso lança um pouco mais de luzo que estava errado, mas ainda estou confuso sobre oporque. Por que o compilador não me forçou a converter o IEnumerable em um IQueryable?