2017-05-08 3 views
-2

Lesen Sie die Playerdetails vom Benutzer und weisen Sie sie dem Player-Klassenobjekt zu. Fügen Sie das Objekt zu einer Liste vom Typ Player hinzu, und schreiben Sie eine linq-Abfrage, um die Spielernamen aus der Liste abzurufen. Verwenden Sie grundlegende Auswahlabfrage in LINQ.Anzeigen der Spielernamen nach dem Abrufen von Benutzer

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);  
+0

@HimBromBeere Um ehrlich zu sein, sie‘ Ich habe tatsächlich etwas probiert, ich habe mich nur nicht gegoogelt, wenn sie ihre unexpe bekommen haben Ergebnis. – TheLethalCoder

+1

Denken Sie darüber nach ... p1 ein IEnumerable gegen 100 Spielernamen. Was erwartest du für den toString-Wert? –

Antwort

0

Die Nachricht gedruckt wurde, weil das Objekt durch eine LINQ-Abfrage zurückgegeben keine benutzerdefinierte ToString Methode hat. Daher wird beim Aufruf von einfach der Typname ausgegeben.

Sie können es ausdrucken, indem Sie:

p.ToList().ForEach(Console.WriteLine); 
+2

Das OP ist offensichtlich ein Anfänger, obwohl dies ein Dupe oder Off-Thema ist, könnte es sich lohnen, Ihre Antwort zu erklären, so ist es klar, was genau los ist. – TheLethalCoder

+0

@TheLethalCoder Habe ich nicht schon im ersten Absatz eine Erklärung gegeben? – Sweeper

+0

Warum ist der Code falsch, nicht wie er funktioniert? – TheLethalCoder

0
var pl=from t in p select t; 

einfach die Abfrage zurück. Um die Liste zu bekommen, sollte man so vorgehen.

var pl = (from t in p select t).ToList(); 
+0

Dann Wie drucke ich das im zeilenweisen Format? – Gayathri

+0

versuchen Sie dies, für (int i = 0; i

0
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); 

Statt wählen t (die das Spielerobjekt auswählen), wählen Sie t.PlayerName. Dadurch wird eine IEnumerable-Eigenschaft von PlayerName zurückgegeben. Sie können später dieses IEnumerable durchlaufen und die Zeichenfolge anzeigen

+0

Es druckt korrekt, aber am Ende zeigt es einige Ausnahmen – Gayathri

+0

Unbehandelte Ausnahme: System.NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts bei Programm festgelegt. – Gayathri

+0

m__0 (.Spieler t) [0x00000] in: 0 bei System.Linq.Enumerable + c__Iterator10'2 [Player, System.String] .MoveNext() [0x00000] in: 0 bei Program.Main (System.String [] args) [0x00000] in: 0 – Gayathri

0

Das Ergebnis eines LINQ ist immer ein Ausdruck, der zu dem Zeitpunkt ausgeführt wird, wenn Sie es verwenden oder eine Methode wie Distinct aufrufen. Auch in Ihrem Fall sehen Sie einen Iterator aus dem gleichen Grund.

Ändern Sie Ihren Code ein wenig

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); 

Edit:

Ihr Haupt zu beheben wurde überarbeitet, das Problem

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); 
+0

Es funktioniert, aber am Ende bekam Ausnahme – Gayathri

+0

Was ist die Ausnahme, die Sie sehen? – Gururaj

+0

Nicht behandelte Ausnahme: System.NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts bei Program festgelegt. m__0 (.Spieler t) [0x00000] in: 0 bei System.Linq.Enumerable + c__Iterator10'2 [Player, System.String] .MoveNext() [0x00000] in: 0 bei Program.Main (System. String [] args) [0x00000] in: 0 – Gayathri

Verwandte Themen