Xamarin формирует аварийный проект Android, когда я использую свойство объекта (get-set)

#xamarin #properties

Вопрос:

Я столкнулся с проблемой при создании проекта. Если я использую свойства (get;set;), приложение Android завершает работу в момент присвоения значения свойству.

Например: я создал чистый проект xamarin, чтобы устранить влияние моего кода.

Собственность в моем классе:

  public class Item
    {
     public string Id
            {
                get { return Id; }
                set { Id = value; }
            }
    }
 

Использование имущества:

  public AboutPage()
        {
            Item gg = new Item();
            gg.Id = "test";
            InitializeComponent();
        }
 

Приложение выходит из строя на линии:

 set { Id = value; }
 

Ошибка не отображается.
Ошибка

Справка. Это первый раз, когда я это вижу. Я понизил рейтинг платформы. Использованные чистые проекты. Что я делаю не так?

UPD: ссылка на мое решение

Комментарии:

1. Привет @Adventure, не хотели бы вы поделиться версиями Xamarin, которые вы используете?

2. Я использую формы Xamarin версии 5.0.0.2012. Версии являются последними, и проект в студии чист.

Ответ №1:

Вы можете попробовать изменить свойство, как показано ниже:

 public class Item
{
    public string Id { get; set; }

}
 

или

 public class Item
{
    private string id;
    public string Id
    {
        get { return id; }
        set { id = value; }
    }
}
 

когда вы нарушаете INotifyPropertyChanged интерфейс:

 public class Item : INotifyPropertyChanged
{
    private string id;
    public string Id
    {
        get { return id; }
        set { id = value; OnPropertyChanged("Id"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
 

Комментарии:

1. Вот как это работает. Но это не вариант. Я столкнулся с этой проблемой, когда внедрял интерфейс INotifyPropertyChanged.

2. @AdventureMania Вы могли бы проверить выше.

3. Спасибо. Я разрешил ссылку по имени свойства. Это моя ошибка. Извините.

Ответ №2:

Когда вы это сделаете:

 public string Id
{
    get { return Id; }
    set { Id = value; }
}
 

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

Вместо этого вы либо сделаете его свойством auto:

 public string Id { get; set; }
 

или добавьте резервное поле для свойства:

 private string _id;
public string Id
{
   get => _id;
   set => _id = value;
}