[英]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个成员,其名称如seat1
, seat2
, seat50
等,对吗? 如果是这样,那是一个非常糟糕的类设计,正如您所发现的那样,因为它要求您对代码中特定字段的所有引用进行硬编码,或者交替使用反射(如Garath在其回答中建议的那样),这更加复杂且容易出错。
更好的解决方案是重新设计clsTest
类,使其具有一个名为Seats
的属性,该属性是Array
或Seats
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.