正在搜索这个答案,但没有找到答案。
有没有办法只从列表的特定索引中删除其中一个属性?事件可能吗?
所以,如果我有一个清单:
List<Person> people = new List<Person>();
其中:
public class Person
{
#region Public Properties
public string Name { get; set; }
public string Age { get; set; }
#endregion
}
并且假设我们有三个索引,每个索引都包含x个属性:
是否可以删除,例如姓名&#39; Sarah&#39;但不是&#39; 19&#39;
的年龄我试图这样做,但没有运气,因为它删除了整个索引而不是名称:
people.RemoveAll(p => p.Name == "Sarah")
答案 0 :(得分:1)
是否可以删除,例如名称'Sarah'而不是年龄为'19'?
不使用您发布的代码,但事实并非如此。值"Sarah"
和19
本质上是绑定的,因为它们都是Person
类的声明成员。 Person
的任何实例总是都有Name
和Age
属性的值。
根据您实际尝试做的事情(您的问题相当模糊),您可能会发现仅设置Name
属性null
很有用。然后其他代码可以使用null
值来指示“此属性不存在”。该物业仍将实际存在,并具有价值。但是该值将为null
,因此其余代码可以在此基础上忽略它,就好像它不存在一样。
解决问题的另一种方法是存储没有预先声明的属性集的对象。例如,您可以将数据存储为字典。坦率地说,这是不可取的,因为你将失去静态(编译时)类型安全和属性命名的所有优点。但这是可以完成的。它看起来像这样:
List<Dictionary<string, object>> people = new List<Dictionary<string, object>>()
{
new Dictionary<string, object>
{
{ "Name", "Bob" },
{ "Age", 21}
},
new Dictionary<string, object>
{
{ "Name", "Sarah" },
{ "Age", 19 }
},
new Dictionary<string, object>
{
{ "Name", "Mary" },
{ "Age", 29 }
},
};
然后,如果您有特定的索引,则要删除名称,而不是年龄:
int index = ...;
people[index].RemoveKey("Name");
答案 1 :(得分:-1)
这是我认为你需要的:
people.Where(person => person.Age == 19)
.ToList()
.ForEach(person => person.Name = null);