求解释输出(与预期不一致)

lin12345 2013-05-10 01:25:31

代码如下:

static void Main(string[] args)
{
var allData = new List<Tuple<int, string>>() {
new Tuple<int, string>(0, "Zero"),
new Tuple<int, string>(1, "and"),
new Tuple<int, string>(2, "Feng"),
new Tuple<int, string>(3, "yan")
};

var groupData = allData.GroupBy(data => data.Item1);
var partitions = new List<IEnumerable<string>>();
for (int i = 0; i < 4; ++i)
{
var learnData = groupData.Where(data => (data.Key != i)).SelectMany(data => data)
.Select(data => data.Item2);

foreach (var d in learnData)
{
Console.Write(d + " ");
}
Console.WriteLine("\n********");

partitions.Add(learnData);
//partitions.Add(new List<string>(learnData));
}
Console.WriteLine("");

Console.WriteLine("=====");
foreach (var p in partitions)
{
foreach (var d in p)
{
Console.Write(d + " ");
}
Console.WriteLine("\n********");
}
Console.ReadLine();
}


输出见截图

为什么“========”之后的输出与之前的不一样
求提示相关的知识点
...全文
170 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gomoku 2013-05-10
  • 打赏
  • 举报
回复
learnData是查询表达式,他记录了数据源,查询方式等等。 你在partitions中存的就是表达式,而不是查询结果。 你可以认为在打印====以后,i的值变成了5。所以learnData再次运行时,查询方式中的i等于5,所有的单词就都被打印出来了。 你注释掉的那一行,可以达到你的预期。因为在new List(learnData)的时候运行了表达式,而这个时候i还是循环内的值。
黄瓜黄瓜 2013-05-10
  • 打赏
  • 举报
回复

 var learnData = groupData.Where(data => (data.Key != i)).SelectMany(data => data)
                        .Select(data => data.Item2);
                var newdata = new List<string>(learnData);
                foreach (var d in learnData)
                {
                    Console.Write(d + " ");
                }
                Console.WriteLine("\n********");

                partitions.Add(newdata);
learnData 的值在不停的变 List 中的也会跟着变的

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧