@M_Egor

При запуске консольного приложения на C# выдаёт «Stack overflow.» как исправить?

Код вот, не могу найти ошибку
Код


Worker.cs
using System;

namespace Projects
{
    class Worker
    {
        public string name;
        public int Age{

            get => Age;
            set
            {
                if(Age > value)
                {
                    Console.WriteLine("Error");
                }
                else
                {
                    Age = value;
                }
            }
        }
        public int ID {get;set;}
        public int Pay {get;set;}

        public Worker(){}
        public Worker(string name,int Age,int ID,int Pay){
            this.name = name;
            this.Age = Age;
            this.ID = ID;
            this.Pay = Pay;
        }
        public void About()
        {
            Console.WriteLine("{0},{1},{2},{3}",name,Age,ID,Pay);
        }
    }
    
}

Program.cs
using System;

namespace Projects
{
    class Program
    {
        static void Main(string[] args)
        {

            Worker Thomas = new Worker("Thomas",24,0467,30000);
            Thomas.About();

            Console.ReadLine();
        }
    }
}

  • Вопрос задан
  • 509 просмотров
Решения вопроса 2
freeExec
@freeExec
Участник OpenStreetMap
У вас Age устанавливает сама себя и происходит зацикливание.
Ответ написан
У вас в свойстве Age рекурсия - если нет ошибки. Добавьте backing field к нему:
private int age;
public int Age {
                get => this.age; 
                set => {
                    if(value < this.age) // На самом деле очень странная проверка. Если будет создано с конструктором по-умолчанию, то всегда будет падать
                        throw new ArgumentException(nameof(value)); // Кидаем Exception вместо Console.WriteLine, тк писать Console.WriteLine в свойствах - плохой тон.
                    this.age = value; 
                 }
              }


PS

Прочитайте про кодстайл
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы