例子
看看下面的代码:
private void DeDuplicateOrganisations()
{
var profileOrgs = _organisations.Where(o => o.ExistsInProfile).ToList();
var kvkOrgs = _organisations.Where(o => !o.ExistsInProfile).ToList();
profileOrgs.ForEach(o =>
{
var duplicate = kvkOrgs.FirstOrDefault(k => k.KvK == o.KvK || k.Title == o.Title);
if (duplicate != null)
{
o.CompanyInfoOrganisation = duplicate.CompanyInfoOrganisation;
o.ExistsInBoth = true;
kvkOrgs.Remove(duplicate);
}
});
_organisations = profileOrgs.Concat(kvkOrgs).OrderBy(o => o.Title).ToList();
}
在此示例中,CompanyInfoOrganisation
当组织被视为重复时,将复制属性(简单地获取;设置;属性)。这一切都按预期工作,重复数据被很好地删除了。
在此消息中也是如此:
_organisations.First(o => o.ExistsInBoth).CompanyInfoOrganisation != null;
问题
现在我将列表绑定到_organisations
列表框
lbxCompanies.DataSource = null;
lbxCompanies.DataSource = _organisations;
lbxCompanies.DisplayMember = "Title";
lbxCompanies.SelectedIndex = -1;
稍后获取所选值:
var org = lbxCompanies.SelectedValue as Organisation;
gbxCompanyInfo.Visible = org != null;
if (gbxCompanyInfo.Visible)
if (org.CompanyInfoOrganisation != null)
// NEVER GETS HERE (but gbxComanpyInfo is visible)
如果我尝试读取CompanyInfoOrganisation
属性,当我知道属性已设置时,我总是会得到 null。
问题
这里发生了什么?为什么属性引用被破坏了?我怎样才能防止这种情况发生?