使用null合并运算符进行初始化?
我可能没有很好地掌握了?? 操作员还遇到了我无法解释的设计缺陷。
比较以下两个属性,唯一的区别是如何初始化:第一个显式初始化,而第二个与?? 操作员(或者我在这里做错了吗?)。
如果我使用这两个属性运行数据init,则基于第一个属性的集合将按预期填充,而第二个属性将按照预期填充。 operator永远不会被填充,并在集合中提供0个元素。
在我的假设中肯定有些不对劲; 这里有什么缺陷?
PS请忽略在基类中实现INotifyPropertyChanged的Set方法,该方法与此问题无关(仅限于初始化类型)。
//属性版本1
private ObservableCollection _userNameColl = new ObservableCollection(); public ObservableCollection UserNameColl { get { return _userNameColl; } set { Set(ref _userNameColl, value); } }
//属性版本2
private ObservableCollection _userNameColl; public ObservableCollection UserNameColl { get { return _userNameColl ?? new ObservableCollection(); } 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" }); }
第二个永远不会初始化您的字段,但总是返回一个新的集合。 试试这个:
上述就是C#学习教程:使用null合并运算符进行初始化?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public ObservableCollection UserNameColl { get { return _userNameColl ?? (_userNameColl = new ObservableCollection ()); } set { Set(ref _userNameColl, value); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/952287.html