C# 这在IList中是可能的吗

C# 这在IList中是可能的吗,c#,C#,我有一个名为Profile的公共类。当前具有2个属性的非常简单的模型类字符串名称和字符串字段。当我开发这个项目时,课程将会扩展,但目前它并不是特别重要 我有一个类型为Profile的全局静态IList,名为Profiles。我对操作这些IEnumerable类型中的数据非常陌生,但我希望更新单个概要文件的一个属性。我尝试了以下操作,但我收到一个对象引用未设置异常。下面是我设置属性的地方: Profiles.Single(x => x.Name == listBoxProfiles.Text

我有一个名为
Profile
的公共类。当前具有2个属性的非常简单的模型类<代码>字符串名称和
字符串字段
。当我开发这个项目时,课程将会扩展,但目前它并不是特别重要

我有一个类型为
Profile
全局静态IList
,名为
Profiles
。我对操作这些
IEnumerable
类型中的数据非常陌生,但我希望更新单个概要文件的一个属性。我尝试了以下操作,但我收到一个对象引用未设置异常。下面是我设置属性的地方:

Profiles.Single(x => x.Name == listBoxProfiles.Text).Fields = textBoxFieldName.Text;
调试器显示listbox和textbox文本属性都具有正确的值,因此我认为我使用single的方式是错误的


如果有人能告诉我一些情况,我将不胜感激。

只需对代码进行简单的修改,使其更具防御性:

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项,它将抛出异常


如果您知道您的代码应该始终包含您要查找的项,那么您的代码将正常工作-但我建议不要使用这种编程方式,而是采取更具防御性的方式。

实际上是一个好问题,+1。@RoyDictus-“我收到一个对象引用未设置异常”如果在调试时在行中添加断点,并在即时窗口中仅运行
Profiles.Single(x=>x.Name==listBoxProfiles.Text)
,是否获得配置文件?听起来好像没有一个配置文件的名称与您的值匹配。您的单一使用是可以的。您确定Profiles、listBoxProfiles和textBoxFieldName不为null,并且Profiles集合中没有null对象吗?这并不能防止找不到值。感谢您的回答。作为对你最后一点的回应,如果我能得到表达式来更新列表,那么是的,我知道它会一直工作。在前面的方法中,我检查是否选择了有效的配置文件,以及文本框中是否有内容。您的代码已经运行,我已经相应地标记了它-非常感谢您!!!只是出于兴趣,我不知道变量配置文件如何更新此列表?我以为这只是一个单独的变量。结果类型是否使其成为列表的实例,然后更新它?@Govix如果我理解正确:变量
profile
(从列表返回)只是对底层对象的引用。您更新此基础对象上的
字段
,并且列表和局部变量“查看”更新,因为它们的引用指向同一基础对象。非常感谢!这正是我想知道的。是否所有变量都是从方法引用返回的,还是只是IEnumerable结果?我不想太详细地讨论,但所有引用类型都是从方法引用返回的,并作为参数通过引用传递给方法: