通用列表修改C#中的属性值

时间:2011-11-09 06:16:40

标签: c# asp.net list generics

假设我有以下课程

public class abc
{
    int id;
    string name;
}

我使用这个类作为一些数据的集合,我的业务逻辑在其中添加了一些行。

List<abc> lstData = GetData();

现在如果我必须修改一些属性值,我想说我想修改一些值的name属性。

string replaceName = 'jay';

所以这个jay应该在name属性列表的每一行。

怎么做?我认为有一个convertAll方法我们可以使用....

5 个答案:

答案 0 :(得分:7)

ConvertAll通常用于创建新的列表,而听起来您只想修改现有对象中的属性。所以我会用:

foreach (abc value in lstData)
{
    value.name = replaceName;
}

(顺便说一下,如果您使用.NET naming conventions之后的名字,这段代码看起来会更加惯用。)

或者,如果您想创建对象,可以使用ConvertAll

List<abc> newList = lstData.ConvertAll(old => new abc { 
    id = old.id,
    name = replaceName
});

这是为委托使用lambda表达式,以及在每个新对象中设置属性的对象初始值设定项。你接近这个问题的确切方法取决于你真正的班级。

答案 1 :(得分:2)

使用List.ForEach

lstData.ForEach(x => x.name = "jay");

答案 2 :(得分:1)

您可以使用以下LINQ运算符ForEach():

lstData.ForEach(data => data.Name = replaceName);

答案 3 :(得分:0)

你的意思是你想要为列表中所有对象的属性分配相同的值吗?如果是,那么你循环它:

foreach (var item in lstData)
{
    item.name = "jay";
}

答案 4 :(得分:0)

我认为在现实生活中,当您想要修改Name时,您必须拥有Id,因此基于此,您可以在列表中找到要修改的单个对象,如:

 abc objAbc =(
    from emp 
    in lstData 
    where emp => emp.Id = someId 
    select emp)
    .SingleOrDefault(); 

获得objAbc you can do objAbc.Name = "New Name"

you can do objAbc.Name = "New Name"

后,才能使用linq-to-object。

快乐编码