2016-05-23 8 views
0
Private Player[] players = new Player[2]; 
    private int currentPlayerIndex = 0; 



    public Game(Form1 form) 
    { 

     for (int i = 0; i < players.Length; i++) { 
      players[i] = (string)"Player"; } 

Ich halte einen Fehler immer sagen, es String-Spieler-Typ umwandeln cannont ...Warum kann ich den Array-Wert nicht einstellen? Warum wirft es die Saite nicht?

Im Folgenden finden Sie den Player-Klasse, die auch die Eigenschaft für Name setzt ...

class Player 
{ 
    private string name = ""; 



    public Player(string name) 
    { 
     name = "Player"; 

    } 


    public string Name { 
     get { return name; } 

     set { name = value; } 

    } 
+0

Es sollte Spieler sein [i] = neuer Spieler() {}; –

+1

Ein 'Player' ist kein' System.String'. Vielleicht so etwas wie: 'players [i] = neuer Spieler {Name =" Spieler "+ i};' (vorausgesetzt eine 'Name' -Eigenschaft) –

+0

Hallo @TimSchmelter Ich habe oben die Player-Klasse hinzugefügt. Was denken Sie? – diam

Antwort

3

players ist ein Array von Player Objekte:

private Player[] players = new Player[2]; 

Sie versuchen, eine Zeichenfolge in dem Array zu setzen.

players[i] = (string)"Player"; 

Das ist nicht, man kann nur

players[i] = new Player("Player1"); 
-2

Da Ihr Code bietet keine für eine implicit cast von String-Player im Array setzen eine Instanz von Player funktioniert. Sie brauchen etwas wie folgt aus:

public static implicit operator Player(string str) 
{ 
    return new Player(str); 
} 

Natürlich dann werden Sie einen Spieler Konstruktor benötigen, die ein String-Argument.

Edit: Explizite in implizite geändert. Ein impliziter Operator bewirkt, dass der Code kompiliert wird.

+3

Sie glauben wirklich, dass dies das ist, was OP braucht? Wie oft haben Sie im Leben Ihres Programmierers einen expliziten Konvertierungsoperator benötigt? –

+0

Niemals. Aber deshalb kompiliert sein Code nicht. – user2023861

+0

Ich lieferte eine einfache Antwort auf die Frage. 'Warum wird die Zeichenfolge nicht umgewandelt?' Tatsächlich sagt der Compiler-Fehler ziemlich klar, was das Problem ist: "Kann String-Typ nicht implizit in Player konvertieren" (Ich habe mich bei der expliziten Konvertierung geirrt) – user2023861