簡體   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