-1

我有一个 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 的新手。

请提出一些方法来实现这一点..

4

2 回答 2

4

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

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

更好的解决方案是重新设计您的clsTest班级,使其拥有一个称为Seats座位ArrayList座位的属性。如果你有一个public List<string> Seats {get;set;},你可以进入myObject.Seats[5]第五个座位。

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

于 2013-07-23T06:58:36.190 回答
0

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

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)
于 2013-07-23T06:53:05.540 回答