在 C# 中,为什么没有查询句必须转换为 tolist () 的 LinQ 吗?

标签: Linq C#
发布时间: 2017/2/28 22:59:30
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有以下代码︰

class Program
{
    private static List<Member> members = new List<Member>
    {
        new Member() {m_FirstName = "Chiristopher", m_LastName="Harrison"},
        new Member() {m_FirstName = "Jeremy", m_LastName =  "Foster"},
        new Member() {m_FirstName = "Stacey", m_LastName = "Mulcahy"}
    };
    static void Main(string[] args)
    {
        var result = (from m in members
                     where m.m_LastName.Length > 6
                     select m);


        Console.WriteLine("** First Execution **");

        foreach(var member in result)
        {

            Console.WriteLine(member);
        }

        members.Add(new Member() { m_FirstName = "Rian", m_LastName = "ThyTuhfadsl" });

        Console.WriteLine("** Second Execution **");

        foreach (var member in result)
        {
            Console.WriteLine(member);
        }
    }
}

我什么时候建造它︰ 控制台: * * 第一次执行 * * Chiristopher 哈里森史黛西马尔卡希 * * 秒执行 * * Chiristopher 哈里森史黛西马尔卡希雨 ThyTuhfadsl

如果调试,结果变量有 3 值在第一,但它只是打印两个值。 为什么呢?

而在第二个,是四个值。虽然我不重新输入任何代码

如果我键入,

var result = (from m in members
                     where m.m_LastName.Length > 6
                     select m).toList();

是在任何情况下只有两个值。

解决方法 1:

if I debug, result variable has 3 values at the first,

除了其他人说,如果我正确理解你的问题你在谈论结果 3 价值观是指 source 不因为它是只是实例的尚未实现的属性

  private class WhereListIterator<TSource> : Enumerable.Iterator<TSource>
    {
      private List<TSource> source;
      private Func<TSource, bool> predicate;
      private List<TSource>.Enumerator enumerator;

因此您的代码是正确的

enter image description here

赞助商