2016-05-04 14 views
4

Wenn ich Console.Write in Objektinitialisierer verwenden zu diesem FehlerWie kann ich Console.Write im Objektinitialisierer verwenden? Ich

Fehler CS0747 Ungültige initializer Mitglied declarator

person[i] = new Karmand() 
      { 
       Console.Write("first name:"), 
       FirstName = Console.ReadLine(), 
       LastName = Console.ReadLine(), 
       ID = Convert.ToInt32(Console.ReadLine()), 
       Hoghoogh = Convert.ToDouble(Console.ReadLine()) 
      }; 
+0

@MostafizurRahman Warum ist das relevant? – MickyD

+0

Warum sollte das überhaupt möglich sein? 'Console.Write()' gibt nicht einmal einen Wert zurück. Was würde es erlauben, dass dort zu erreichen? –

Antwort

6

Sie kann nicht weil Console.Write ist keine zugängliche Eigenschaft oder ein Feld von Karmand. Sie können nur Werte für Klasseneigenschaften und Felder in object initializers festlegen.

Ihr Code ist ein syntaktischer Zucker (a little bit different) für den folgenden Code.

var person[i] = new Karmand(); 
// what do you expect to do with Console.Write here? 
person[i].FirstName = Console.ReadLine(); 
person[i].LastName = Console.ReadLine(); 
person[i].ID = Convert.ToInt32(Console.ReadLine()); 
person[i].Hoghoogh = Convert.ToDouble(Console.ReadLine()); 

Sie können einen Konstruktor innerhalb Karmand Klasse müssen, dass, wenn Sie wollen für Sie drucken.

public class Karmand 
{ 
    public Karmand(bool printFirstName = false) 
    { 
     if (printFirstName) 
      Console.Write("first name:"); 
    } 

    // rest of class code 
} 

und es dann wie Console.Write("first name:") Entfernen Versuchen

person[i] = new Karmand(printFirstName: true) 
      { 
       FirstName = Console.ReadLine(), 
       LastName = Console.ReadLine(), 
       ID = Convert.ToInt32(Console.ReadLine()), 
       Hoghoogh = Convert.ToDouble(Console.ReadLine()) 
      }; 
1

verwenden. Console.Writeline ist keine Zuordnung zu einer Eigenschaft oder einem Feld.

Von MSDN

Ein Objektinitialisierer wird verwendet, um Werte zu Eigenschaften oder Feldern zuzuordnen. Jeder Ausdruck, der keine Zuweisung zu einer Eigenschaft oder einem Feld ist, ist ein Kompilierungsfehler.

So korrigieren Sie diesen Fehler Stellen Sie sicher, dass alle Ausdrücke im Initialisierer Zuweisungen an Eigenschaften oder Felder des Typs sind.

Update:
Wenn Sie Console.WriteLine verwenden müssen, dann verwenden Sie es vor dem Objektinitialisierer wie

Console.Writeline("first name:"); 
{ person[i] = new Karmand() 
      { 
       FirstName = Console.ReadLine(), 
       LastName = Console.ReadLine(), 
       ID = Convert.ToInt32(Console.ReadLine()), 
       Hoghoogh = Convert.ToDouble(Console.ReadLine()) 
      }; 
Verwandte Themen