3

我有一个名为Profile. 非常简单的模型类,目前有 2 个属性; string Namestring Fields。在我开发项目时,课程会扩展,但目前并不是特别重要。

我有一个Global static IList类型Profile叫做Profiles. 我对处理这些IEnumerable类型的数据非常陌生,但我希望更新单个配置文件的属性之一。我尝试了以下方法,但我收到了一个对象引用未设置异常。以下是我设置属性的位置:

Profiles.Single(x => x.Name == listBoxProfiles.Text).Fields = textBoxFieldName.Text;

调试器显示列表框和文本框文本属性都具有正确的值,所以我认为这是我使用单一错误的方式。

如果有人能提供一些启示,我将不胜感激。

4

1 回答 1

1

只需要一个简单的修改来使代码更具防御性:

var profile = Profiles.SingleOrDefault(x => x.Name == listBoxProfiles.Text);

if (profile != null)
{
    profile.Fields = textBoxFieldName.Text;
}
else
{
    Profiles.Add(new Profile(textBoxFieldName.Text));
}

此代码将处理缺失值,SingleOrDefault期望返回 0 或 1 个项目。如果找到超过 1 个项目,它将引发异常。

如果您知道您的代码应该始终包含您正在寻找的项目,那么您的代码将工作 - 但我建议不要使用这种编程风格,而是要更加防御。

于 2012-04-16T08:30:32.920 回答