向列表中添加空元素

4

我有一个列表:

var Filials = Db.FILIALS.AsEnumerable().Where(x => x.PREFIX > 0).Select(x => new { Name = string.Format("{0} {1}", x.PREFIX, x.NAME), FilialId = (Guid?)x.FILIALID }).OrderBy(x => x.Name).ToList();

我需要将一个空元素添加到这个列表中。我尝试了以下方法:

var lst = new[] { new { Name = string.Empty, FilialId = (Guid?)null } }.ToList();
var Filials = Db.FILIALS.AsEnumerable().Where(x => x.PREFIX > 0).Select(x => new { Name = string.Format("{0} {1}", x.PREFIX, x.NAME), FilialId = (Guid?)x.FILIALID }).OrderBy(x => x.Name).ToList();
lst = lst.Union(Filials);

但是遇到了错误:

无法将类型System.Collection.Generic.IEnumerable隐式转换为System.Collection.Generic.List

在最后一行出现。

如何正确地向列表中添加元素?

4个回答

3
在声明lst的行中,您需要用AsEnumerable() 替换 ToList()
问题在于lstList<anonymous type>类型,但是Union返回IEnumerable<anonymous type>类型。一个IEnumerable<T>不能赋值给List<T>类型的变量。
使用AsEnumerable()使lst变量成为IEnumerable<anonymous type>类型。

3
将最后一行改为使用AddRange方法:
var lst = new[] { new { Name = string.Empty, FilialId = (Guid?)null } }.ToList();
var Filials = Db.FILIALS.AsEnumerable().Where(x => x.PREFIX > 0).Select(x => new { Name = string.Format("{0} {1}", x.PREFIX, x.NAME), FilialId = (Guid?)x.FILIALID }).OrderBy(x => x.Name).ToList();
lst.AddRange(Filials);

你是100%正确的 :). 我在复制原始代码时感到困惑。事实上,这是我经常犯的错误... - Oscar Foley
1
@cad 谢谢。如果删除 lst=lst.AddRange(Filials) 的赋值语句,它就可以正常工作。 - Andrey
@cad 当然可以。事实上,在发布问题之前,我已经尝试过这个变体(我接受了)。但在调试时(当我们设置断点时),它有点奇怪:如果我们将鼠标放在变量“lst”上,我们看不到lst元素,就像变量“Filials”中一样。在调试模式下,只有当我们更多地使用此列表(例如在foreach中枚举)时,lst中的元素才会出现。这让我感到困惑。 - Andrey

2

尝试使用AddRange()方法,它接受的参数是IEnumerable<T>而不是你的类型,可以替换掉FirstList<T>.Union(SecondList<T>)

lst.AddRange(yourIEnumerable);

0

只需要这样怎么样:

Filials.Add(new { Name = string.Empty, FilialId = (Guid?)null })

@cad:那个评论并没有什么意义。 - Daniel Hilgarth
我想说的是,lst是一个通用的列表,.ADD方法只接受类型为:http://msdn.microsoft.com/en-us/library/3wcytfd1.aspx的参数。 - Oscar Foley
@Jakub Konecki 我需要在列表顶部有一个空元素(它是下拉列表的第一个元素)。 - Andrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接