IEnumerable加法的C#延拓法<;T>;

IEnumerable加法的C#延拓法<;T>;,c#,collections,C#,Collections,使用扩展方法将项添加到IEnumerable集合的最佳方法是什么?我的IEnumerableExtensions类中有这个方法,不确定它是否太有效,但我非常谨慎地使用它 enumerable.Concat(new[]{ objToAdd }) public static IEnumerable<T> Add<T>(this IEnumerable<T> enumerable, T item) { var list = enumerable.ToList

使用扩展方法将项添加到IEnumerable集合的最佳方法是什么?

我的IEnumerableExtensions类中有这个方法,不确定它是否太有效,但我非常谨慎地使用它

enumerable.Concat(new[]{ objToAdd })
public static IEnumerable<T> Add<T>(this IEnumerable<T> enumerable, T item)
{
   var list = enumerable.ToList();
   list.Add(item);
   return list;
}
公共静态IEnumerable添加(此IEnumerable可枚举,T项)
{
var list=enumerable.ToList();
列表。添加(项目);
退货清单;
}

我在我的IEnumerableExtensions类中有这个,不确定它是否太有效,但我非常节省地使用它

public static IEnumerable<T> Add<T>(this IEnumerable<T> enumerable, T item)
{
   var list = enumerable.ToList();
   list.Add(item);
   return list;
}
公共静态IEnumerable添加(此IEnumerable可枚举,T项)
{
var list=enumerable.ToList();
列表。添加(项目);
退货清单;
}

不能(直接)。接口的目的是公开枚举数

编辑:您必须将IEnumerable转换为另一种类型(如
列表
)或连接以添加,这不会导致添加到现有的
IEnumerable
,而是连接到新的
IEnumerable


唯一的选择是测试它是否实现了可用于添加的任何接口,如IList、ICollection、IDictionary、ILookup等等。。。即使这样,您也无法确定是否可以添加到现有的
IEnumerable

,因为无法(直接)添加。接口的目的是公开枚举数

编辑:您必须将IEnumerable转换为另一种类型(如
列表
)或连接以添加,这不会导致添加到现有的
IEnumerable
,而是连接到新的
IEnumerable



唯一的选择是测试它是否实现了可用于添加的任何接口,如IList、ICollection、IDictionary、ILookup等等。。。即使这样,您也无法确定是否可以添加到现有的
IEnumerable

及其通过可添加到的可枚举(双关语)类实现的实现。没有必要添加
IEnumerable
实现。如果是,则存在
IEnumerable.Add
。注释是绝对正确的。它是通过可枚举(双关语)类实现的,您可以添加到这些类中。没有必要添加
IEnumerable
实现。如果是,则存在
IEnumerable.Add
。注释绝对正确。实际上,这是创建新的可枚举项,而不是添加到现有的可枚举项是的,但由于
IEnumerable
接口本身是只读的,这是唯一可能的方法。添加到基础集合并不总是一个选项(例如,当基础集合实际上不存在时)。为了强调Andrey所评论的内容,Andrey并没有完全实现一个
添加项
方法(例如,将
添加到
IEnumerable
),正如您所期望的那样。这种方法更合适的名称是
Concat(item)
——在这里,您希望该方法返回一个新的IEnumerable。集合是EntityObject的属性,此对象控制集合的CRUD操作。我必须尝试一下,但我不确定在添加新项后创建全新的可枚举项时会产生什么结果。您必须执行
eo.IEnumProperty=eo.IEnumProperty.AddItem(objToAdd)
这是不好的,因为通常您将
IEnumerable
属性定义为
get
-only。实际上,这是创建新的枚举,而不是添加到现有的枚举中。是的,但是由于
IEnumerable
接口本身是只读的,这是唯一可能的方法。添加到基础集合并不总是一个选项(例如,当基础集合实际上不存在时)。为了强调Andrey所评论的内容,Andrey并没有完全实现一个
添加项
方法(例如,将
添加到
IEnumerable
),正如您所期望的那样。这种方法更合适的名称是
Concat(item)
——在这里,您希望该方法返回一个新的IEnumerable。集合是EntityObject的属性,此对象控制集合的CRUD操作。我必须尝试一下,但我不确定在添加新项后创建全新的可枚举项时会产生什么结果。您必须执行
eo.IEnumProperty=eo.IEnumProperty.AddItem(objToAdd)
这不好,因为通常您将
IEnumerable
属性定义为
get
-only。您不能向IEnumerable添加元素,最好是使用一个以上的元素创建新的IEnumerable是的,我知道。这就是为什么我问什么是最好的方法。你不能将元素添加到IEnumerable,最好是用一个元素创建新的IEnumerable是的,我知道。这就是为什么我问什么是最好的方法。不好,这会分配额外的内存。Mehrdad Afshari的答案确实更好。完全同意,这就是为什么在我的exytensions库中这大部分都未使用和不推荐的原因。不好,这会分配额外的内存。Mehrdad Afshari的答案确实更好。完全同意,这就是为什么在我的exytensions库中这大部分都未使用和不推荐的原因。