1
votes

Comment réparer "Le champ X n'est jamais assigné et aura sa valeur par défaut nulle"?

J'essaie de saisir une entrée depuis la console (rue, ville, pays) mais les champs sont soulignés et affichent le message (le champ n'est jamais assigné et aura sa valeur nulle). J'ai également créé une méthode SetFullAddress qui ne fonctionne pas (idk si c'est à cause de ce message).

Code à l'intérieur de la classe Address:

        Address address = new Address();
        Console.Write("Street: ");
        address.Street = Console.ReadLine();

        Console.Write("City: ");
        address.City = Console.ReadLine();

        Console.Write("Country: ");
        address.Country = Console.ReadLine();

        Console.WriteLine();
        address.DisplayAddress();

Et à l'intérieur de la méthode Main :

public class Address
{
    private string street;
    private string city;
    private string country;

    public Address()
    {
        this.Street = street;
        this.City = city;
        this.Country = country;
    }

    public string Street { get; set; }
    public string City { get; set; }
    public string Country { get; set; }

    public string SetFullAddress()
    {
        return ($"Full address: {street} {city} {country}");
    }

    public void DisplayAddress()
    {
        Console.WriteLine($"Street: {Street}");
        Console.WriteLine($"City: {City}");
        Console.WriteLine($"Country: {Country}");
        Console.WriteLine(SetFullAddress());


    }

}


2 commentaires

Il semble que vous ne savez pas ce que vous faites ou que vous ne comprenez pas complètement les propriétés automobiles. Veuillez lire stackoverflow.com/questions/6001917/...


@ViRuSTriNiTy Eh bien, je suis un débutant, j'ai besoin d'éclaircissements et de plus d'informations. C'est pourquoi je demande. Merci de votre aide!


4 Réponses :


0
votes

Cela peut vous aider:

   public static void Main()
    {

        Console.Write("Street: ");
        string street = Console.ReadLine();

        Console.Write("City: ");
        string city = Console.ReadLine();

        Console.Write("Country: ");
        string country = Console.ReadLine();

        Address address = new Address(street, city, country);
        Console.WriteLine();
        address.DisplayAddress();
    }

    public class Address
    {
        private string street;
        private string city;
        private string country;

        public Address(string street, string city, string country)
        {
            this.street = street;
            this.city = city;
            this.country = country;
        }

        public string Street {
            get => street;
            set => street = value;
        }
        public string City {
            get => city;
            set => city = value;
        }
        public string Country {
            get => country;
            set => country = value;
        }

        public string SetFullAddress()
        {
            return ($"Full address: {street} {city} {country}");
        }

        public void DisplayAddress()
        {
            Console.WriteLine($"Street: {Street}");
            Console.WriteLine($"City: {City}");
            Console.WriteLine($"Country: {Country}");
            Console.WriteLine(SetFullAddress());


        }

    }


3 commentaires

Le constructeur fait partie de ma tâche donc je pense que je dois l'utiliser


OK, alors veuillez vous référer à la réponse de TheGeneral.


@Ada J'ai édité ma réponse. Veuillez vérifier si c'est ce que vous voulez



0
votes

L'avertissement vous indique exactement quel est le problème, les éléments suivants ne sont jamais affectés

class MyClass  
{  
   Hashtable table;  // CS0649  
   // You may have intended to initialize the variable to null  
   // Hashtable table = null;  

   // Or you may have meant to create an object here  
   // Hashtable table = new Hashtable();  

   public void Func(object o, string p)  
   {  
      // Or here  
      // table = new Hashtable();  
      table[p] = o;  
   }  

   public static void Main()  
   {  
   }  
} 

Peut-être que vous vouliez initialiser les propriétés réelles dans le constructeur

//private string street;
//private string city;
//private string country;

public Address(string street, string city, string country)
{
    this.Street = street;
    this.City = city;
    this.Country = country;
}


2 commentaires

J'ai supprimé les champs et ajouté trois arguments de chaîne au constructeur, mais maintenant Address address = new Address (); affiche une erreur. Je ne devrais entrer aucune information comme: Adresse adresse = nouvelle adresse ("rue", "ville", "pays"); mais laissez l'utilisateur saisir ces informations depuis la console. Une idée de comment résoudre ce problème?


@Ada supprime complètement la construction ou ajoute une autre par défaut public Address () {}



0
votes

La raison des avertissements est que vous n'utilisez jamais (lisez l'attribution de valeurs à) les champs privés.

public string Street 
{ 
    get => street; 
    set => street = value; 
}
public string City
{ 
    get => city; 
    set => city = value; 
}
public string Country
{ 
    get => country; 
    set => country = value; 
}

Vous utilisez plutôt les propriétés implémentées automatiquement. Vous pouvez, soit les supprimer en toute sécurité et réécrire votre méthode SetFullAddress comme suit (en utilisant les propriétés implémentées automatiquement)

public string SetFullAddress()
{
    return ($"Full address: {Street} {City} {Country}");
}

Ou vous pouvez créer des propriétés avec des champs de sauvegarde privés implicitement typés comme p >

    private string street;
    private string city;
    private string country;

    public Address()
    {
        this.Street = street;
        this.City = city;
        this.Country = country;
    }

    public string Street { get; set; }
    public string City { get; set; }
    public string Country { get; set; }

Veuillez noter que lorsque vous utilisez des propriétés implémentées automatiquement, le compilateur crée les champs de sauvegarde. Vous pouvez en savoir plus sur les propriétés implémentées automatiquement ici .


0 commentaires

0
votes

Si vous ne rencontrez aucune erreur et que vous souhaitez simplement désactiver les avertissements de ce script, vous pouvez utiliser #pragma warning disable 0649

Mais n'en abusez pas, ces avertissements pourront vous aider plus tard.


0 commentaires