我可能沒有把握好??運營商尚未解決,並且遇到了我無法解釋的設計漏洞。使用空合併運算符進行初始化?
比較以下兩個屬性,唯一的區別是如何進行初始化:第一個顯式初始化,第二個是用?操作員(或者我在這裏做錯了嗎?)。
如果我運行具有兩個屬性的數據init,則基於第一個屬性的集合按預期填充,而第二個屬性則爲??運算符永遠不會被填充並在集合中出現0個元素。
在我的假設中,這裏肯定有些錯誤;這裏有什麼缺陷?
P.S.請忽略Set方法,該方法在基類中實現INotifyPropertyChanged,並且對此問題(僅限於初始化類型)沒有影響。
//屬性版本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"
});
}
第二個實際上從未設置內收集,除非你手動設置它的價值,所以,除非你做它會在您每次設法得到它時返回一個新的'ObservableCollection'實例。 – Abion47
Aaaah!這解釋了它。 – user2921851