【问题标题】:Generic list modify value of property in C#通用列表修改 C# 中的属性值
【发布时间】:2011-11-09 06:16:40
【问题描述】:

假设我有以下课程

public class abc
{
    int id;
    string name;
}

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

List<abc> lstData = GetData();

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

string replaceName = 'jay';

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

如何做到这一点?我认为有一个 convertAll 方法我们可以使用它....

【问题讨论】:

    标签: c# asp.net list generics


    【解决方案1】:

    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 表达式,并使用对象初始化器来设置每个新对象的属性。您解决此问题的确切方式取决于您的真实班级。

    【讨论】:

    • 我想要的是列表的其余属性不应更改,只有列表的特定属性应在所有行中更改。在这种情况下,名称应随任何东西更改,但 ID 应保持不变。能不能实现。
    • @ankur:你试过第一段代码了吗?这只是修改了列表中所有对象的一个​​属性。
    • 我试着做一些这样的想法 int k = 1234;列表 lst = new List();获取数据 g = 新的获取数据(); for (int i = 0; i s.name = b);它正在做这件事。
    • @ankur:但这不是我的回答所建议的,是吗?您是否尝试过我的回答中的任何一种方法?
    • 我都试过了。我想在修改后重用列表。我已经使用了您的第二种方法,但没有为相同创建一个新列表。只是迭代列表并更改了值。
    【解决方案2】:

    使用List.ForEach

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

    【讨论】:

    • 我个人更喜欢使用foreach,除非有充分的理由使用ForEach(例如,我已经得到一个代表)。见blogs.msdn.com/b/ericlippert/archive/2009/05/18/…
    • @Jon 我的背景主要是 C++ :) 从未使用过 std::for_each 因为 C++ 没有 lambda。所以你可以想象!顺便说一句,阅读你的书 C# 深度 .. 太棒了。我拿起的第一本没有教我如何做 for / while 循环的编程书……至少现在还没有
    • 很高兴你喜欢它 - 我非常刻意想写一本书,没有一开始就假设没有知识:)
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      您的意思是要为列表中所有对象的属性分配相同的值吗?如果是,则循环遍历它:

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

      【讨论】:

        【解决方案5】:

        我认为在现实生活中,当你想修改Name时,你必须有Id,所以基于它你可以在列表中找到一个要修改的对象,例如:

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

        一旦你有objAbc you can do objAbc.Name = "New Name"

        我希望这是你想知道的。您需要使用 System.Linq 才能使用 linq-to-object。

        愉快的编码

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-24
          • 2020-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-01
          相关资源
          最近更新 更多