当我使用对象 属性 (get-set) 时,Xamarin 表单崩溃了 android 项目
Xamarin forms crashed android project, when i use object property (get-set)
我 运行 在创建项目时遇到问题。如果我使用属性 (get;set;),android 应用程序会在为 属性.
赋值时崩溃
例如:我创建了一个干净的 xamarin 项目来消除我的代码的影响。
属性 在我的 class:
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; }
错误不显示。
Error
求助。这是我第一次看到这个。我已经降级了平台。使用干净的项目。我做错了什么?
UPD:link 我的解决方案
您可以尝试像下面这样更改 属性:
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;
}
我 运行 在创建项目时遇到问题。如果我使用属性 (get;set;),android 应用程序会在为 属性.
赋值时崩溃例如:我创建了一个干净的 xamarin 项目来消除我的代码的影响。
属性 在我的 class:
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; }
错误不显示。 Error
求助。这是我第一次看到这个。我已经降级了平台。使用干净的项目。我做错了什么?
UPD:link 我的解决方案
您可以尝试像下面这样更改 属性:
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;
}