Как я могу использовать Console.Write в инициализаторе объекта?

Когда я использую Console.Write в инициализаторе объекта я получаю эту ошибку

Ошибка CS0747 Недопустимый элемент объявления инициализатора

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

2 ответа

Вы не можете, потому что Console.Write не является доступным свойством или полем Karmand, Вы можете устанавливать значения свойств и полей только в инициализаторах объектов.

Ваш код является синтаксическим сахаром ( немного другим) для кода ниже.

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

Вы можете иметь конструктор внутри Karmand класс, чтобы напечатать это для вас, если хотите.

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

    // rest of class code
}

а затем использовать его как

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

Попробуйте удалить Console.Write("first name:"), Console.Writeline не является назначением для свойства или поля.

Из MSDN

Инициализатор объекта используется для присвоения значений свойствам или полям. Любое выражение, которое не является присваиванием свойству или полю, является ошибкой времени компиляции.

Чтобы исправить эту ошибку, убедитесь, что все выражения в инициализаторе являются присваиваниями свойствам или полям типа.

Обновить:
Если вам нужно использовать Console.Writeline, используйте его до инициализации объекта, например

Console.Writeline("first name:");
{ person[i] = new Karmand()
            {
                FirstName = Console.ReadLine(),
                LastName = Console.ReadLine(),
                ID = Convert.ToInt32(Console.ReadLine()),
                Hoghoogh = Convert.ToDouble(Console.ReadLine())
            };
Другие вопросы по тегам