Tommy Loh Ответов: 3

Инициализатор поля не может ссылаться на нестатическое поле, метод или контроллер свойств


namespace MeetingScheduler.Controllers
{
    public class EventsController : ApiController
    {
        EmailAddress[] emailAddress = new EmailAddress[]
        {
            new EmailAddress { Address = "hello@hello.com", Name = "helloname" }
        };

        Attendee[] attendees = new Attendee[]
        {
            new Attendee { EmailAddresses = emailAddress , Type = "user"}
        };

        Event[] events = new Event[]
        {
            new Event { Id = 1, Subject = "Hello World", Start = DateTime.Parse("2019-07-31 18:00:00"), End = DateTime.Parse("2019-07-31 20:00:00"), Location = "NCS Hub", Attendees = attendees }
        };

}
}


Может ли кто-нибудь сказать мне, как правильно хранить адрес электронной почты в Attendee?

Что я уже пробовал:

без понятия. Я попытался посмотреть, например, в интернете, используя сообщение об ошибке, но не нашел ничего подобного.

Richard MacCutchan

Сообщение об ошибке говорит вам, что не так. В настоящее время участник не может ссылаться на значение из emailAddress, так как оно не является статическим значением. Точно так же событие не может ссылаться на участников.

3 Ответов

Рейтинг:
21

Benktesh Sharma

Можно определить переменные и инициализировать их в конструкторе.

public class EventsController : ApiController
    {
        private EmailAddress[] emailAddress;
        private Attendee[] attendees;
        private Event[] events;

        public EventsController()
        {

            EmailAddress[] emailAddress = new EmailAddress[]
            {
                new EmailAddress { Address = "hello@hello.com", Name = "helloname" }
            };

            Attendee[] attendees = new Attendee[]
            {
                new Attendee { EmailAddresses = emailAddress , Type = "user"}
            };

            Event[] events = new Event[]
            {
                new Event { Id = 1, Subject = "Hello World", Start = DateTime.Parse("2019-07-31 18:00:00"), End = DateTime.Parse("2019-07-31 20:00:00"), Location = "NCS Hub", Attendees = attendees }
            };

        }

    }


Рейтинг:
1

Gerry Schmitz

Основываясь на направлении, в котором вы, по-видимому, идете, вам нужно добавить метод "AddAttendee" в свой класс EventsController; например

public bool AddAttendee( string email, ...) {

   // Duplicate check
   ...
   attendees.Add( new Attendee(...));
   return true;  // Added.
}


Рейтинг:
0

BillWoodruff

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

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

public class EmailAddress
{
    public EmailAddress(){}

    public string Address { get; set; }
    public string Name { get; set; }
}

// set default values in ctor
public EmailAddress(string address = "hello@hello.com", string name = "helloname")
{
    Address = address;
    Name = name;
}

// with c# >= 6 " : set default values in auto-property declaration
public EmailAddress(string address, string name) : this()
{
    if (address != null) Address = address;
    if (name != null) Name = name;
}

public string Address { get; set; } = "hello@hello.com";
public string Name { get; set; } = "helloname";