gpt4 book ai didi

c# - 使用空合并运算符初始化?

转载 作者:太空狗 更新时间:2023-10-30 01:01:06 25 4
gpt4 key购买 nike

我可能没有很好地掌握??运算符 遇到了一个我无法解释的设计缺陷。

比较以下两个属性,唯一的区别是如何初始化:第一个显式初始化,而第二个使用 ??运算符(operator)(或者我在这里做错了吗?)。

如果我使用这两个属性运行 data init,基于第一个属性的集合会按预期填充,而第二个带有 ??运算符 永远不会被填充并在集合中产生 0 个元素。

我的假设肯定有问题;这里的缺陷是什么?

附言请忽略基类中实现INotifyPropertyChanged的Set方法,与此问题无关(仅限于初始化类型)。

//属性版本1

private ObservableCollection<UserName> _userNameColl = new ObservableCollection<UserName>();
public ObservableCollection<UserName> UserNameColl
{
get { return _userNameColl; }
set { Set(ref _userNameColl, value); }
}

//属性版本 2

private ObservableCollection<UserName> _userNameColl;
public ObservableCollection<UserName> UserNameColl
{
get { return _userNameColl ?? new ObservableCollection<UserName>(); }
set { Set(ref _userNameColl, value); }
}

//一个用于创建对象集合的简单类

public class UserName
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}

//填充集合的简单测试

for (int i = 0; i < 4; i++)
{
// silly data init just for test

UserNameColl.Add(new UserName()
{
Name = $"UserName No {i}",
Age = 20 + i,
Email = $"email{i}@local.lan"
});
}

最佳答案

第二个从不初始化您的字段,但总是返回一个新集合。试试这个:

public ObservableCollection<UserName> UserNameColl
{
get { return _userNameColl ?? (_userNameColl = new ObservableCollection<UserName>()); }
set { Set(ref _userNameColl, value); }
}

关于c# - 使用空合并运算符初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41675316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com