有3种方式将项目添加到大多数列表中… 通过直接的公共API方法,通常Add(SomeType) 通过通用的IList<T>.Add(T)接口 通过非通用的IList.Add(object)接口方法 而你通常期望他们的performance差不多一样。 但是,LINQ的EntitySet<T>是… 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>(); […]