EntitySet - есть ли разумная причина, по которой IList.Add не устанавливает назначенный?

Есть 3 способа добавления элементов в большинство списков ...

  • с помощью прямого открытого метода API, обычно Add (SomeType)
  • через общий интерфейс IList .Add (T)
  • через неуниверсальный метод интерфейса IList.Add (object)

, и вы обычно ожидаете их вести себя более или менее так же. Однако LINQ EntitySet ... специфичен как для 3.5, так и для 4.0; IList API не помечает набор как «назначенный» - два других механизма делают - это звучит тривиально, но важно, поскольку сильно влияет сериализация (т.е. вызывает ее пропуск) в шаблонном коде.

Пример:

EntitySet<string> set1 = new EntitySet<string>();
set1.Add("abc");
Debug.Assert(set1.Count == 1); // pass
Debug.Assert(set1.HasLoadedOrAssignedValues, "direct"); // pass

EntitySet<string> set2 = new EntitySet<string>();
IList<string> typedList = set2;
typedList.Add("abc");
Debug.Assert(set2.Count == 1); // pass
Debug.Assert(set2.HasLoadedOrAssignedValues, "typed list"); // pass

EntitySet<string> set3 = new EntitySet<string>();
IList untypedList = set3;
untypedList.Add("abc");
Debug.Assert(set3.Count == 1); // pass
Debug.Assert(set3.HasLoadedOrAssignedValues, "untyped list"); // FAIL

Теперь ... это меня глубоко удивляет; настолько, что мне потребовалось более 2 часов отслеживания вверх по коду, чтобы изолировать, что происходит. Итак ...

есть ли какая-нибудь разумная причина для этого? Или это просто ошибка?

(FWIW, также была проблема в set.Assign (set) в 3.5, но теперь это исправлено в 4.0.)

40
задан Marc Gravell 31 May 2011 в 23:18
поделиться