问题描述
我在创建项目时遇到了问题。如果我使用属性 (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; }
帮助。这是我第一次看到这个。我已经降级了平台。使用干净的项目。我做错了什么?
解决方法
您可以尝试更改属性,如下所示:
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));
}
}
,
当你这样做时:
public string Id
{
get { return Id; }
set { Id = value; }
}
您实际上是在创建一个无限循环。这就是您的应用程序崩溃的原因。您正在无限地调用 setter。
相反,您可以将其设为自动属性:
public string Id { get; set; }
或为属性添加支持字段:
private string _id;
public string Id
{
get => _id;
set => _id = value;
}