为什么我的元组集合的值不会出现在手表中?

时间:2018-06-05 12:48:44

标签: c# tuples

为什么当我运行此控制台应用程序时:

static void Main(string[] args)
{
    var items = new List<(string login, string email)>();
    items.Add(("james", "lsdkjsdkj@skdfjd.dfkd"));
    items.Add(("james2", "lsdkjsdkj@df333.dfkd"));
    items.Add(("james", "lsdkjsdkj@skdfjd.dfkd"));
    items.Add(("james2", "lsdkjsdkj@df333.dfkd"));

    foreach (var item in items)
    {
        Console.WriteLine(item.email);
    }

    var duplicates = items.Where(e => e.login == "james");
    Console.WriteLine(duplicates.Count());

    foreach (var duplicate in duplicates)
    {
        Console.WriteLine($"Found: {duplicate.login}, {duplicate.email}");
    }

    Console.ReadLine();
}   

它正确显示了变量duplicates的内容:

enter image description here

但是当我调试时,它没有显示duplicates的内容:

enter image description here

1 个答案:

答案 0 :(得分:2)

Current属性只是枚举器当前位置集合中的一个元素。

来自MSDN:

  

在以下任何条件下,电流未定义:

     
      
  • 在创建枚举数之后,枚举数位于集合中的第一个元素之前。在读取Current的值之前,必须调用MoveNext以将枚举器推进到集合的第一个元素。

  •   
  • 对MoveNext的最后一次调用返回false,表示集合的结束。

  •   
  • 由于集合中所做的更改(例如添加,修改或删除元素),枚举数无效。
  •   

因此,如果您致电duplicates.GetEnumerator().MoveNext();,您会看到Current现在有数据。

如果您想在调试时看到duplicates内容,请使用Results View