[英]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.