【问题标题】:get and set value of object in List in C#C#中List中对象的获取和设置值
【发布时间】:2013-06-28 18:29:55
【问题描述】:

我有一个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 时不会搜索列表两次? 或者也许我做的完全错误,还有更简单的方法......

【问题讨论】:

    标签: c# asp.net list


    【解决方案1】:

    您已经在朗读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;
    }
    

    【讨论】:

    • 我真的认为这会起作用,我已经尝试过了,也许我的问题出在其他地方。至少我知道它应该起作用。谢谢
    • myObject 真的是struct 而不是class
    • 那么这应该可以正常工作。您可以通过再次从列表中读取它并查看 FieldValue 属性设置是否正确来验证。
    • 哦,我明白了。您将错误的列表传递给GetAndSetField。你应该通过myValues,而不是allValues
    • 实际上这是一个复制/粘贴错误,我认为您的答案应该有效,我只是想确保它无法正常工作。我发现问题在于 fieldValue 为空,所以这就是它不起作用的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2020-12-07
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多