Как исправить «Поле X никогда не назначается и будет иметь значение по умолчанию null»? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь ввести данные с консоли (улица, город, страна), но поля подчеркнуты и отображают сообщение (поле никогда не назначается и будет иметь значение null).Я также создал метод SetFullAddress, который не работает (IDK, если это из-за этого сообщения).

Код внутри класса адреса:

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


    }

}

И внутри метода Main:

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

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Предупреждение точно говорит, в чем проблема, следующие никогда не назначаются

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

Возможно, вы хотели инициализировать фактические свойства в конструкторе

//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;
}

Предупреждение компилятора (уровень 4) CS0649

Поле 'field' никогда не назначается и всегда будет иметь значение по умолчанию 'value'

Компилятор обнаружил неинициализированныйобъявление частного или внутреннего поля, которому никогда не присваивается значение.

В следующем примере CS0649 генерируется:

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()  
   {  
   }  
} 
0 голосов
/ 04 января 2019

Причиной появления предупреждений является то, что вы никогда не используете (читай присваивание значений) личные поля.

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

Вместо этого вы используете автоматические свойства.Вы можете либо безопасно удалить их и переписать свой метод SetFullAddress следующим образом (используя Автоматически Реализованные Свойства)

public string SetFullAddress()
{
    return ($"Full address: {Street} {City} {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; 
}

Имейте в виду, что при использовании автоматически внедряемых свойств компилятор создает вспомогательные поля.Вы можете прочитать больше о автоматически реализованных свойствах здесь .

0 голосов
/ 04 января 2019

Это может помочь вам:

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


        }

    }
...