Il existe 3 façons d'ajouter des éléments à la plupart des listes...
- via une méthode publique directe de l'API, généralement
Add(SomeType)
- via le générique
IList<T>.Add(T)
interface - par le biais de la méthode non générique
IList.Add(object)
méthode d'interface
et vous attendez normalement d'eux qu'ils se comportent plus ou moins la même chose. Cependant, la méthode LINQ EntitySet<T>
est... particulier à la fois en 3.5 et en 4.0 ; la fonction IList
API n'est pas signaler l'ensemble comme étant "attribué" - les deux autres mécanismes faire - Cela semble trivial, mais c'est important dans la mesure où cela influence fortement la sérialisation (c'est-à-dire que cela la fait sauter) dans le code passe-partout.
Ejemplo:
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
Maintenant... c'est profondément surprenant pour moi ; à tel point qu'il m'a fallu plus de 2 heures de traque à travers le code pour isoler ce qui se passait. Alors...
est là tout une raison saine pour cela ? Ou s'agit-il simplement d'un bug ?
(FWIW, il y a aussi eu un problème en set.Assign(set)
en 3.5, mais cela est maintenant corrigé en 4.0).