【问题标题】:How to replace new object into exiting object list<> with same ID object?如何将新对象替换为具有相同 ID 对象的现有对象列表<>?
【发布时间】:2020-10-21 09:37:29
【问题描述】:

假设我有List&lt;person&gt; personlist 有 3 个类似的项目

{ ID=1, name="manish"}, {ID=2, name="jon"}, {Id=3, name="david"}

现在我想替换现有项目:

{ID=2, name="jon"} 

新项目

{ID=2, name="Vijay"}

我需要这样做,因为我已经更改了具有 50 多个属性的对象。

【问题讨论】:

  • 如果是List&lt;MyType&gt;,您需要删除一项并插入新项。请您使用实际的 C# 代码编辑您的问题以演示类型、列表和替代对象吗?
  • 你已经显示了 json.... json 是这个问题的一部分吗?
  • @TheGeneral 我认为这是一个人对象的初始化。 Layzily writte...如果我错了,请纠正我 Manish
  • 先使用RemoveAt,然后使用Insert
  • 我建议你看看这个帖子stackoverflow.com/questions/17188966/…

标签: c#


【解决方案1】:

无需用RemoveInsert 重组List。您可以使用FindIndex 并使用Indexer 有效地更新引用

搜索与 指定谓词,并返回第一个从零开始的索引 在整个 List&lt;T&gt; 中出现。

var list = new List<Something>()
{
   new Something() {Id = 1, Name = "bob"},
   new Something() {Id = 2, Name = "tom"},
   new Something() {Id = 3, Name = "frank"},
};

var index = list.FindIndex(x => x.Id == 2);
list[index] = new Something() {Id = 2, Name = "doug"};

foreach (var item in list)
   Console.WriteLine($"{item.Id} : {item.Name}");

输出

1 : bob
2 : doug
3 : frank

如果您不想完全替换该项目,您可以只更新一个属性

var result = list.FirstOrDefault(x => x.Id == 2); 

if(result != null)
    result.Name = "SomethingElse";

【讨论】:

    【解决方案2】:

    首先,删除索引处的项目 然后你需要插入新的项目,如果删除的项目是最后一个项目那么你需要使用Add插入,如果不是最后一个项目那么使用Insert

    var list = ...
    var item = ...
    var index = 1;
    
    list.RemoveAt(index);
    if(list.Count == index) {
        list.Add(item);
    } else {
        list.Insert(index , item);
    }
    

    【讨论】:

    • 你有一个对象作为输入而不是索引!
    【解决方案3】:

    您可以在不替换整个项目的情况下替换属性...

    如果你需要先找到索引,那么就随心所欲,例如:

    var index = List.FindIndex(s => s.Id == 2);
    

    你可以这样做:

    if (index >= 0) //index found
    {
        List[index].Name == "New Value";
    }
    

    您不必创建一个全新的“人”并将其分配给列表, 您也可以修改现有的...除非您将“person”类中的 name 属性设置为仅在初始化期间设置...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多