C#中如何打印Linq处理后List的重复值而非类型名?
解决Three Or More游戏重复值打印问题
问题根源
你的代码输出System.Collections.Generic.List1[System.Int32]`是因为:
- 在foreach循环中,你直接打印了整个
player1dicerolls列表对象,而非Linq分组后得到的重复值信息。 string.Join()方法仅执行但未将结果输出到控制台。
修正后的代码
1. 优化掷骰逻辑(可选但更高效)
不需要每次循环都创建新的Die实例,因为类内的Random是静态的,复用一个实例即可:
Die dice = new Die(); for (int i = 0; i < 5; i++) { int x = dice.Roll(); Console.ReadLine(); Console.WriteLine($"One dice rolled a {x}"); player1dicerolls.Add(x); }
2. 正确打印重复值信息
修改foreach循环内的输出语句,使用Linq分组后的value对象获取重复点数和次数:
// 打印重复的点数及其出现次数 foreach (var value in player1dicerolls.GroupBy(x => x) .Where(g => g.Count() > 1) .Select(y => new { Element = y.Key, Counter = y.Count() }) .ToList()) { Console.WriteLine($"点数{value.Element}重复出现了{value.Counter}次"); } // 打印所有掷骰结果(可选) Console.WriteLine($"所有掷骰结果:{string.Join(", ", player1dicerolls)}");
输出示例
假设掷骰结果是[2,2,3,3,3],输出会是:
点数2重复出现了2次 点数3重复出现了3次 所有掷骰结果:2, 2, 3, 3, 3
内容的提问来源于stack exchange,提问作者Max Butler
相关产品推荐
相关产品推荐

