2009-07-21 10 views
3

Je dois écrire un programme de carnet d'adresses en C# 2008. Il est supposé demander à l'utilisateur le nom, l'email et la couleur préférée de la personne (seulement par les couleurs de l'énumération). Ensuite, il est censé enregistrer les contacts pour référence future.Erreur d'accès de propriété C#

Ceci est le code produit l'erreur .:

class Contact 
{ 
    string Name; //This string represents the person's Name. 
    string Email; //This string represents the person's Email. 

    System.Drawing.KnownColor Favoritecolor 
    { 
     get; 
    } 
    static void Request() 
    // This function requests the user to type in information about the person. 
    { 
     Console.WriteLine("Please enter the person's name, e-mail, and favorite color"); 
     Console.Write; string Name; string Email; ; 
     Console.ReadLine(); 
    } 
} 

L'erreur est:

'Lab02.Program.Contact.Favoritecolor': property or indexer must have at least one accessor 
+1

ôtait le tag devoirs. Hes demander de l'aide sur une erreur, si ses devoirs ou non devrait être hors de propos. – Brandon

+1

Je suis d'accord. @Jeff: ** ceci ** est le genre de question que vous devriez poser. Vous avez eu un problème spécifique, vous avez rapidement obtenu de l'aide. Si vous posez des questions générales, "s'il vous plaît faites moi mes devoirs", pas tellement. –

Répondre

10
System.Drawing.KnownColor Favoritecolor 
{ 
    get; 
    set; 
} 

En ce moment vous avez obtenir sur la propriété couleurPreferee, mais pas où est Il a toujours été défini, il ne peut donc jamais retourner une valeur réelle.

Si vous souhaitez implémenter une propriété auto, vous devez ajouter un ensemble. Sinon, créez un champ de sauvegarde et renvoyez-le.

private System.Drawing.KnownColor _favoriteColor = someValue; 
System.Drawing.KnownColor Favoritecolor 
{ 
    get { return _favoriteColor; } 
} 
2

Votre propriété Favoritecolor doit posséder à la fois un accesseur get et un accesseur set. Comme ceci:

System.Drawing.KnownColor Favoritecolor 
     { 
      get; 
      set; 
     } 

Je pense que quelque chose comme ça est plus ce que vous allez pour:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Contact contact = new Contact(); 

     Console.WriteLine("Please enter the person's name:"); 
     contact.Name = Console.ReadLine(); 

     Console.WriteLine("Please enter the person's e-mail address:"); 
     contact.Email = Console.ReadLine(); 

     while (contact.Favoritecolor == 0) 
     { 
      Console.WriteLine("Please enter the person's favorite color:"); 
      string tempColor = Console.ReadLine(); 

      try 
      { 
       contact.Favoritecolor = (System.Drawing.KnownColor)(Enum.Parse(typeof(System.Drawing.KnownColor), tempColor, true)); 
      } 
      catch 
      { 
       Console.WriteLine("The color \"" + tempColor + "\" was not recognized. The known colors are: "); 
       foreach (System.Drawing.KnownColor color in Enum.GetValues(typeof(KnownColor))) 
       { 
        Console.WriteLine(color); 
       } 
      } 
     } 
    } 

    class Contact 
    { 
     //This string represents the person's Name. 
     public string Name { get; set; } 

     //This string represents the person's Email. 
     public string Email { get; set; } 

     public System.Drawing.KnownColor Favoritecolor 
     { 
      get; 
      set; 
     } 
    } 
} 

Vous n'avez même pas besoin de votre énumération couleurs, parce que vous utilisez comme System.Drawing.KnownColor votre type de propriété. Donc, vous pouvez le retirer complètement.

+0

J'ai besoin que l'utilisateur saisisse le nom, l'email, et la couleur de favorit. Je pensais que cela fonctionnerait mais apparemment pas, pouvez-vous m'aider avec ça? –

+0

Ce code devrait fonctionner exactement tel quel. Vous n'aurez pas besoin de votre code précédent, à condition de le mettre dans votre espace de noms Lab02. Si cela ne fonctionne pas, quelles erreurs obtenez-vous? – Charlie

+0

Si la personne entre une couleur inconnue, elle doit créer une exception –

0

Vous pouvez mettre quelque chose dans votre principale méthode, puisque nous allons le ne signale rien et donc rien ne charger lorsque vous exécutez l'application