从用户获取后显示播放器名称



从用户中读取播放器详细信息,并将其分配给玩家类对象。将对象添加到类型玩家列表中,然后编写LINQ查询以从列表中检索播放器名称。在linq中使用基本选择查询。

Player[] p=new Player[100];
for(i=0;i<;i++) {
    p[i]=new Player();
    p[i].PlayerName=Console.ReadLine();
}
Console.WriteLine("Player list:");
var pl=from t in p select t;
// While printing I am getting System.Linq.Enumerable+c__Iterator10`2[Player,Player]
Console.WriteLine(pl);      

该消息被打印了,因为LINQ查询返回的对象没有自定义ToString方法。因此,调用Console.WriteLine将简单地打印类型名称。

您可以通过:

打印它
p.ToList().ForEach(Console.WriteLine);
var pl=from t in p select t;

只是返回查询。对于获取列表,您应该像这样使用。

 var pl = (from t in p select t).ToList();
 Player[] p=new Player[100];
   for(int i=0;i<p.Length;i++) {
        p[i]=new Player();
        p[i].PlayerName="SomeName";
    }
    Console.WriteLine("Player list:");
    var pl=from t in p select t.PlayerName;
    foreach(var name in pl)
        Console.WriteLine(name);

而不是选择t(选择玩家对象(,选择 t.playername 。这将返回Playername属性的ienumerable。您以后可以循环浏览此IEnumerable,并显示字符串

linq的结果始终是一种表达式,它将在您使用外观或调用诸如不同左右的方法时执行。在您的情况下,您也出于同样的原因看到迭代器。

一点点更改代码

var pl=from t in p select t.Name;
// While printing I am getting 
System.Linq.Enumerable+c__Iterator10`2[Player,Player]
foreach(var p in p1)
    Console.WriteLine(p);

编辑:

您的主要主题已修订以解决该问题

int n, i;
Console.WriteLine("Enter number of players");
n = int.Parse(Console.ReadLine());
Player[] p = new Player[n];
Console.WriteLine("Enter the player names");
for (i = 0; i < n; i++)
{
    p[i] = new Player();
    p[i].PlayerName = Console.ReadLine();
}
Console.WriteLine("Player list:");
var pl = from t in p select t.PlayerName;
foreach (var name in pl) Console.WriteLine(name);

最新更新