简体   繁体   English

在C#中的List中获取并设置对象的值

[英]get and set value of object in List in C#

I have a list of objects , and I need to search if a value exists in the list, if it does, I need to set one of the properties of the object found to another value, is it possible to do this without searching the List twice? 我有一个objects列表,我需要搜索列表中是否存在一个值,如果存在,则需要将找到的object的属性之一设置为另一个值,是否可以不搜索List就执行此操作两次? (Once to check if the object exists in the list and once to set its value) (一旦检查object存在于列表中,并设置一次其值)

For example: 例如:

class myObject
{
   public string FieldNumber {get;set;}
   public string FieldValue  {get;set;}
}

var myValues = new List<myObject>();
myValues.Add(new myObject{ FieldNumber = "100A"});
myValues.Add(new myObject{ FieldNumber = "100B"});

var allValues = new List<myObject>();
allValues.Add(new myObject{ FieldNumber = "200A", FieldValue = "3"});
allValues.Add(new myObject{ FieldNumber = "100B", FieldValue = "C"});

foreach(var obj in allValues)
{
    GetAndSetField(myValues, obj.FieldNumber, obj.FieldValue);
}

void GetAndSetField(List<myObject> list, string fieldNumber, string fieldValue)
{
    var tempField = list.FirstOrDefault(x => x.FieldNumber.Equals(fieldNumber));
    if(tempField != null)
        list.FirstOrDefault(x => x.FieldNumber.Equals(fieldNumber)).FieldValue = fieldValue;
}

Is it possible to change the code in the GetAndSetField method so that it doesn't search the list twice if the object is found? 是否可以更改GetAndSetField方法中的代码,以便在找到object不会两次搜索列表? Or maybe I'm doing this completely wrong and there's an easier way... 也许我做错了这,并且有一种更简单的方法...

You're already reading out tempField . 您已经在读出tempField Just use it: 只需使用它:

void GetAndSetField(List<myObject> list, string fieldNumber, string fieldValue)
{
    var tempField = list.FirstOrDefault(x => x.FieldNumber.Equals(fieldNumber));
    if (tempField != null)
        tempField.FieldValue = fieldValue;
}

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

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