У меня проблемы с пониманием проблемы. У меня есть немного кода, который извлекает записи из базы данных с помощью LINQ и помещает их в объект, который передается в интерфейс. Это выглядит примерно так:
public IEnumerable<ISomeObject> query()
{
return from a in dc.SomeTable
select new SomeObject
{
//Assign various members here
} as ISomeObject;
}
Когда я проверяю это, я помещаю возвращаемый IEnumerable в переменную, называемую результатами, и запускаю эту строку:
Assert.AreEqual(EXPECTED_COUNT, results.Count());
Когда это выполняется, я получаю сообщение System.Security.VerificationException: "Операция может дестабилизировать время выполнения".
Я нашел решение здесь, вот что:
var results = from a in dc.SomeTable
select new SomeObject
{
//Assign various members here
} as ISomeTable;
return results.OfType<ISomeObject>();
Это работает, но мне трудно понять, что здесь происходит. Почему я получил исключение в первую очередь и как изменили строки кода выше? Документация MSDN, похоже, предполагает, что это проблема безопасности типов, но я не вижу, где предыдущий код был небезопасным.
UPDATE Немного больше информации я узнал. Первый пример работает, если я делаю возвращаемый тип IQueryable. Это проливает немного больше света на то, что происходит не так, но я все еще смущен о том, почему. Почему компилятор не заставил меня включить IEnumerable в IQueryable?