IList是否可以实现这一点

时间:2012-04-16 08:22:16

标签: c#

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

我的Global static IList类型Profile名为Profiles。我很擅长操纵这些IEnumerable类型的数据,但我希望更新单个配置文件的一个属性。我尝试了以下但我收到的对象引用没有设置异常。以下是我设置属性的地方:

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

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

如果有人能说清楚,我将不胜感激。

1 个答案:

答案 0 :(得分: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个项目,它将抛出异常。

如果您知道您的代码应始终包含您正在寻找的项目,那么您的代码将有效 - 但我建议不要采用这种编程风格,而是采取更具防御性的方式。