generic-list 相关问题

语言无关标签,用于每个项目具有特定位置的项目集合

替换对象列表中的对象

在 C# 中,如果我有一个 List,并且有一个 T 类型的对象,如何用 T 类型的对象替换 List 中的特定项? 这是我尝试过的: 列表 在 C# 中,如果我有一个 List<T>,并且有一个 T 类型的对象,如何将 List<T> 中的特定项目替换为 T 类型的对象? 这是我尝试过的: List<CustomListItem> customListItems = new List<CustomListItem>(); CustomListItem customListItem1 = new CustomListItem() { name = "Item 1", date = DateTime.MinValue}; CustomListItem customListItem2 = new CustomListItem() { name = "Item 2", date = DateTime.MinValue }; CustomListItem customListItem3 = new CustomListItem() { name = "Item 3", date = DateTime.MinValue }; customListItems.Add(customListItem1); customListItems.Add(customListItem2); customListItems.Add(customListItem3); CustomListItem newCustomListItem = new CustomListItem() { name = "Item 4", date = DateTime.Now }; customListItem2 = customListItems.Where(i=> i.name == "Item 2").First(); customListItem2 = newCustomListItem; 在上面的代码中,我想用 customListItem2 替换 newCustomListItem。 我是否必须删除列表中的项目,然后插入新项目?我可以不做简单的customListItem2 = newCustomListItem作业吗? 用另一个项目替换列表中的项目的最有效方法是什么? 你必须更换的是物品,而不是customListItem2的值。只需替换以下内容: customListItem2 = customListItems.Where(i=> i.name == "Item 2").First(); customListItem2 = newCustomListItem; 有了这个: customListItem2 = customListItems.Where(i=> i.name == "Item 2").First(); var index = customListItems.IndexOf(customListItem2); if(index != -1) customListItems[index] = newCustomListItem; 编辑: 正如 Roman R. 在评论中所述,您可以用简单的 .Where(predicate).First() 替换 First(predicate): customListItem2 = customListItems.First(i=> i.name == "Item 2"); var customListItems = new List<CustomListItem>(); var customListItem1 = new CustomListItem() { name = "Item 1", date = DateTime.MinValue }; var customListItem2 = new CustomListItem() { name = "Item 2", date = DateTime.MinValue }; var customListItem3 = new CustomListItem() { name = "Item 3", date = DateTime.MinValue }; customListItems.Add(customListItem1); customListItems.Add(customListItem2); customListItems.Add(customListItem3); var newCustomListItem = new CustomListItem() { name = "Item 4", date = DateTime.Now }; customListItems[customListItems.FindIndex(x => x.name == "Item 2")] = newCustomListItem; 或 public static class ListExtensions { public static void Replace<T>(this List<T> list, Predicate<T> oldItemSelector , T newItem) { //check for different situations here and throw exception //if list contains multiple items that match the predicate //or check for nullability of list and etc ... var oldItemIndex = list.FindIndex(oldItemSelector); list[oldItemIndex] = newItem; } } 然后 customListItems.Replace(x => x.name == "Item 2", newCustomListItem); 如果列表的顺序对你来说不重要 你可以试试这个 CustomListItem newCustomListItem = new CustomListItem() { name = "Item 4", date = DateTime.Now }; customListItem2 = customListItems.Where(i=> i.name == "Item 2").First(); customListItems.Remove(customListItem2); customListItems.Add(newCustomListItem ); 您可以使用选择来构建一个新的 iEnumerable 并替换项目: customListItems.Select(x => x.name == "Item 2" ? newItem : x).ToList(); 我没有测试性能,但我发现这个解决方案非常简洁和明确。 我通常有一些定义关键字段的基本接口,以便我可以更轻松地使用泛型。因此继承 IKey 的类将有一个字符串 Key 字段,它是记录的唯一标识符。 因此,在哈米德的示例之上构建,但具有“添加或替换”概念: public static void AddOrReplace<T>(this List<T> items, T newItem) where T : class, IKey { items.AddOrReplace(x => x.Key == newItem.Key, newItem); } public static void AddOrReplace<T>(this List<T> items, Predicate<T> oldItemSelector, T newItem) { var index = items.FindIndex(oldItemSelector); if (index < 0) { items.Add(newItem); } else { items[index] = newItem; } } 然后为了实现这些扩展,我可以使用与 list.Add() 类似的语法: list.AddOrReplace(newItem); 另一种方法是使用 DynamicData 包,列表中还有很多其他设施: 快速解答 确保已安装该软件包: Install-Package DynamicData -Version 7.4.3 然后 using DynamicData; DynamicData.ListEx.Replace<CustomListItem>(customListItems, customListItem2, newCustomListItem); 以下是完整的工作解决方案。 工作示例 我的自定义项目类别 public class CustomListItem { public string name; public DateTime date; public override string ToString() { return name + ", " + date.ToString(); } } 在主要尝试中,请确保在替换之前注释掉分配。 static void Main(string[] args) { List<CustomListItem> customListItems = new List<CustomListItem>(); CustomListItem customListItem1 = new CustomListItem() { name = "Item 1", date = DateTime.MinValue }; CustomListItem customListItem2 = new CustomListItem() { name = "Item 2", date = DateTime.MinValue }; CustomListItem customListItem3 = new CustomListItem() { name = "Item 3", date = DateTime.MinValue }; customListItems.Add(customListItem1); customListItems.Add(customListItem2); customListItems.Add(customListItem3); CustomListItem newCustomListItem = new CustomListItem() { name = "Item 4", date = DateTime.Now }; customListItem2 = customListItems.Where(i => i.name == "Item 2").First(); //customListItem2 = newCustomListItem; DynamicData.ListEx.Replace<CustomListItem>(customListItems, customListItem2, newCustomListItem); foreach(var customListItem in customListItems) { Debug.Print("\n" + customListItem.ToString()); } } references: https://github.com/reactivemarbles/DynamicData. https://dynamic-data.org

回答 6 投票 0

如何制作包含主要项目的列表

我需要具有可共享行为的项目列表。 例子: 人物类 有清单 其中只有一个 PhoneNumber 为 bool IsPrimary 其他物品也一样 有清单 哈...

回答 3 投票 0

使用 linq 删除列表中的重复项

我有一个带有属性(Id、名称、代码、价格)的 Items 类。 项目列表中填充有重复的项目。 例如: 1 件商品1 IT00001 100 美元 2 项目2 IT0...

回答 11 投票 0

如何从模型列表中删除特定字段

类结构 public class EmployeeViewModel { public List employeedetails { get; set; } public string age { get; set; }. } 公共类EmployeeDetails ...。

回答 1 投票 0

集合make_from_separate中功能调用中的不兼容实际参数

不明白我在这里错了...类LINKED_LIST_SEP [G]继承LINKED_LIST [G]创建make,make_from_iterable,make_from_separate功能{NONE}-初始化...

回答 1 投票 0

根据属性值获取泛型/列表中对象的索引

我可以用我的类的实例填充Generic.List,每个实例在ID属性中都具有唯一的值,就像这样。 $ packages = [System.Collections.Generic.List [object]] :: New()类Package {#...

回答 1 投票 1

如何隐藏列表类中的属性

我有一个问题,确实需要一些解决方案。我的课在下面。公共类属性{public int attributeId {get;组; } public int?attributeValueId {get;组; } public ...

回答 2 投票 0

BindingSource获取当前行

我无法获取当前行值。我能怎么做? bindingSource1.DataSource = LData; (LData是通用列表)public DataRow currentRow {get {int position = this ....

回答 1 投票 2

如何使用c#中的泛型类对象返回泛型列表?

我想返回带有类对象的表列表,并且此调用也很通用,我不想在任何其他类型上使用任何非强类型列表,例如ArrayList。公共列表 GetTables()...

回答 2 投票 0

Smartpointers不能与Delphi中的通用TObjectlist一起很好地工作

我正在使用Spring4D在Delphi 10.3 Rio中测试智能指针。这是我的测试程序。我创建了一个通用的TObjectList,我想使用Shared.Make(TTestObj.Create)将简单的TObject添加到此列表...

回答 2 投票 0

nservicebus使用msmq传输发送具有列表类型属性的命令对象

我有2个nservicebus端点,一个端点正在尝试发送包含3个属性(即bool,List和class)的命令(类)对象。这是public下面的完整命令类...

回答 1 投票 0

通用方法的返回类型也必须是通用的吗?

有人告诉我创建一个结合两个通用ArrayList的方法。这是代码,我有几个问题:公共静态 List CombineArrayList(List list_Array1,List&...

回答 1 投票 0

在Java中创建动态类型列表

我试图在不事先知道其类型的情况下创建一个List(实际上是几个)对象,然后将要创建的List的参数传递给Classe类型的参数,所以对于...

回答 1 投票 0

ClosedXml具有IEnumerable属性的InsertTable

已接管了使用ClosedXML的旧项目。创建错误的方法采用IEnumerable 行,并为其创建工作表。但是存在...

回答 1 投票 0

通过实体框架连接返回通用列表

我正在使用Entity Framework,并且希望联接2个表,然后将其作为列表返回。但是我的方法返回List (contact是我数据库中的一个表),我无法返回它。由于新的...

回答 1 投票 0

如何使用匿名类的通用列表获取列表数据

我有一个通用的匿名类,如下所示:public class wfassignmentList:List {{public wfassignmentList(DataConnectDataContext db){var ...

回答 1 投票 0

我如何在自定义List 上从属性调用方法?

因此,我目前正在重写我一直在使用C#(用于更新程序)的VB.NET应用程序,但遇到了一些似乎无法弄清的障碍。我正在尝试循环浏览...

回答 1 投票 0

查找通用集的幂集

我被问到一个利用Java泛型并创建Set类的问题。使用此Set类,我已经能够执行其他功能,例如并集,交集,补码等。但是...

回答 1 投票 1

C#泛型方法的最佳实现,它需要根据传入的类类型来定位不同的属性

因此,我有一种方法可以解析传入的地址字段,并且根据其长度,它需要写入一个或多个字段(不要问...需要DB2旧式代码)。当前我们有此方法...

回答 2 投票 1

为什么C#List 添加方法很慢?

我有一个使用Dapper从数据库读取数据的ASP.NET MVC项目,我需要导出到Excel。小巧快! ExecuteReader只需要35秒。但是list.Add(InStock);花费太多...

回答 1 投票 -3

© www.soinside.com 2019 - 2024. All rights reserved.