Нарушение контракта кода для проецирования в анонимный тип с использованием IQueryable - PullRequest
2 голосов
/ 11 ноября 2011

Мне трудно понять, почему я получаю нарушение контракта по коду для следующего фрагмента кода:

     // servicequery is of type System.Data.Services.Client.DataServiceQuery<DividendData>
     // therefore implements IQueryable
     var serviceQuery = CreateDataService().DividendData;
     Contract.Assume(serviceQuery != null);
     Contract.Assume(serviceQuery.Any());
     var data = serviceQuery
        .Select(div => new {I = 2});

Нарушение: CodeContracts: requires unproven: constructor != null прямо в задании.

Если я изменю этот код на следующий, нарушение исчезнет:

  class resulttype
  {
     public int I { get; set; }
  }


  var serviceQuery = CreateDataService().DividendData;
  Contract.Assume(serviceQuery != null);
  Contract.Assume(serviceQuery.Any());
  var data = serviceQuery
     .Select(div => new resulttype() {I = 2});

У меня вопрос «почему?».

1 Ответ

0 голосов
/ 24 декабря 2011

Кажется, в контракте нужен фактический класс.Что вы можете сделать:

var serviceQuery = CreateDataService().DividendData;
Contract.Assume(serviceQuery != null);
Contract.Assume(serviceQuery.Any());
var data = serviceQuery.ToList().Select(div => {I = 2});

В любом случае, очень странно, что вы там делаете ...

...