如何从集合中检索第一个元素?

6

我不知道如何从这个集合中检索第一个项目:

IGrouping<string, Plantilla> groupCast = group as System.Linq.IGrouping<string, Plantilla>;

我也尝试了:
IGrouping<string, Plantilla> firstFromGroup = groupCast.FirstOrDefault();

但不起作用,因为已经存在原因和显式转换


你能否发布一下你用来获取“group”的查询语句? - lc.
3个回答

13

为什么不直接使用 var

var firstFromGroup = group.First();

至于你遇到错误的原因,我猜测可能是键或元素与你想象的不同。查看错误消息的其余部分,以了解编译器抱怨的类型。请注意,如果涉及匿名类型,则唯一获取它的方法是使用var


'System.Collections.Generic.HashSet<myproject.Models.Image>'没有包含名为'First'的定义。 - alamnaryab
@alamnaryab 你可能忘记了包含 System.LinqFirstIEnumerable<T> 上的扩展方法 - lc.

1

尝试这个(基于你的部分解决方案):

foreach (var group in dlstPlantillas.SelectedItems)
{
    var groupCast = groupCast = group as System.Linq.IGrouping<string, Plantilla>
    if(groupCast == null) return;

    item = groupCast.FirstOrDefault<Plantilla>();  
    if(item == null) return;

    // do stuff with item
}

一个变量的内存成本是多少?另外,匿名类型比已知类型更重吗? - Jonathan Escobedo
1
一个变量是自由的。当你写 var x = "x"; 时,编译器可以看到 "x" 是一个字符串,因此它会写入 String x = "x"; 这一行代码。这一切都发生在编译器中,最终生成的 .EXE 文件中的代码将是相同的。 - Orion Edwards

0

这是我的部分解决方案:

foreach (var group in dlstPlantillas.SelectedItems)
                {
                    IGrouping<string, Plantilla> groupCast = group as System.Linq.IGrouping<string, Plantilla>;

                    if (null == groupCast) return;
                    foreach (Plantilla item in groupCast.Take<Plantilla>(1)) //works for me
                    {
                        template.codigoestudio = item.codigoestudio;
                        template.codigoequipo = item.codigoequipo;
                        template.codigoplantilla = item.codigoplantilla;
                        template.conclusion = item.conclusion;
                        template.hallazgo = item.hallazgo;
                        template.nombreequipo = item.nombreequipo;
                        template.nombreexamen = item.nombreexamen;
                        template.tecnica = item.tecnica;
                    }
                }

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