Я думаю, что я могу немного смутить синтаксис методов обратного вызова Moq. Когда я пытаюсь сделать что-то вроде этого:
IFilter filter = new Filter();
List<IFoo> objects = new List<IFoo> { new Foo(), new Foo() };  
IQueryable myFilteredFoos = null;
mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
   .Callback( (IFilter filter) => myFilteredFoos = filter.FilterCollection(objects))
   .Returns(myFilteredFoos.Cast<IFooBar>());
Это вызывает исключение, поскольку myFilteredFoos имеет значение null во время вызова Cast<IFooBar>(). Неужели это не работает, как я ожидаю? Я бы подумал, что FilterCollection будет вызываться, а затем myFilteredFoos будет не нулевым и позволит выполнить трансляцию.
 FilterCollection не может возвращать нуль, который привлекает меня к выводу, который он не вызывается. Кроме того, когда я объявляю myFilteredFoos следующим образом:
Queryable myFilteredFoos;
Обратный вызов жалуется, что myFilteredFoos может использоваться до его инициализации.