繁体   English   中英

如何在C#中更新列表集合中的元素

[英]How to update a element in List collection in C#

我有一个List集合,例如List<clsTest> objList = new List<clsTest>();

它有大约一百列。

Predicate<ScreenDefinition> linqQuery = new Predicate<ScreenDefinition>(objQuery);
index = tmp.FindIndex(objQuery);

objQuery是查询条件

我尝试过更新

listJoinedScreenDefinition[index].fieldName = "update";

但是问题是我需要根据我的逻辑动态生成“ fieldName”

Say "seat" + 05 => seat05 is the column name.

就像明智的座位1-座位100一样。

在每次迭代中,我只需要更新一列。

以我尝试如何在该列表中传递动态列名的方式?

我是.Net和Linq的新手。

请提出一些实现此目标的方法。

您的问题与列表和查询无关。 如果只有clsTest类的一个实例,您将处于相同的情况。 问题在于类的设计。

如果我对您的理解正确,那么clsTest有100个成员,其名称如seat1seat2seat50等,对吗? 如果是这样,那是一个非常糟糕的类设计,正如您所发现的那样,因为它要求您对代码中特定字段的所有引用进行硬编码,或者交替使用反射(如Garath在其回答中建议的那样),这更加复杂且容易出错。

更好的解决方案是重新设计clsTest类,使其具有一个名为Seats的属性,该属性是ArraySeats List 如果您有一个public List<string> Seats {get;set;} ,则可以访问myObject.Seats[5]进入第五个座位。

当然,如果不仅仅是一个座位列表,而且您可以使用几种不同类型的编号属性(例如,“ seat” +“ 05”和“ row” +“ 02”),则可以使用Dictionary<string, string> ,以在“ seat05”及其值之间进行映射。

最简单的方法是使用反射。 我不知道您是否使用属性或字段。 对于属性代码将如下所示:

var target = listJoinedScreenDefinition[index];
Type type = target.GetType();
PropertyInfo prop = type.GetProperty("propertyName");
prop.SetValue (target, propertyValue, null);

对于字段,代码非常相似:

var target = listJoinedScreenDefinition[index];
FieldInfo fi = target.GetType().GetField("Name", BindingFlags.NonPublic | BindingFlags.Instance);
fi.SetValue(target ,value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM