0

我有一个列表objects,我需要搜索列表中是否存在一个值,如果存在,我需要将object找到的属性之一设置为另一个值,是否可以在不搜索List两次的情况下执行此操作?(一次检查object列表中是否存在,一次设置其值)

例如:

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;
}

是否可以更改GetAndSetField方法中的代码,以便在找到时不会搜索列表两次object?或者也许我做错了,有一个更简单的方法......

4

1 回答 1

7

你已经在朗读了tempField。只需使用它:

void GetAndSetField(List<myObject> list, string fieldNumber, string fieldValue)
{
    var tempField = list.FirstOrDefault(x => x.FieldNumber.Equals(fieldNumber));
    if (tempField != null)
        tempField.FieldValue = fieldValue;
}
于 2013-06-28T18:32:25.597 回答