添加或修改列表值

时间:2019-08-28 23:02:33

标签: c# list foreach

我有一个名为'XPS_PASS'的模型类,其中将其所有值存储到ValueModelClass中。理想情况下,如果列表中List<ValueModelClass>数据之一中有3个传入值匹配,我将在列表中修改它的值以避免重复。

使用以下代码执行操作。但是在这种情况下,当列表中的ValueModelClass值被修改时,当它从ValueModelClass循环中出来时,数据将再次添加到foreach中。如果该值已在List循环下修改过,我想添加到列表中。请建议我该怎么做?

foreach

添加示例代码以供理解:https://dotnetfiddle.net/2UHqBH

我需要以下输出:

List<ValueModelClass> listValues = new List<ValueModelClass>();
string[] data = line.Split(',');

foreach (var listValue in listValues.ToArray())
{
    if (listValue.name == data[4] && listValue.description == data[3] && listValue.rule == data[2])
    {
        var i = listValues.FindIndex(x => x.hostName.Equals(listValue.name));
        listValues[i].destinationValue.Add(data[0]);
        listValues[i].sourceKey.Add(data[1]);
    }
}

listValues.Add(ValueModelClass);

但是我得到的输出是

{"destinationValue":["https://test.com","https://test2.com","https://test3.com","https://test3.com"],"sourceKey":["/test","/test2","/test3","/test3"],"rule":"rulename1","name":"name1","description":" description1"}
{"destinationValue":["https://test1.com"],"sourceKey":["/test1"],"rule":"rulename2","name":"name2","description":" description2"}

1 个答案:

答案 0 :(得分:1)

正如Rufus L在评论中建议的那样,您需要稍微重新审视自己的逻辑。目前,您正在遍历listValues的整个集合,并验证是否所有项目都符合您的重复条件。如果任何一个值不同-您将添加一个新条目。

但是您需要做相反的事情-如果任何值匹配-请勿添加新值!这是可能的解决方法:

    foreach (var line in dataline)
    {
       string[] data = line.Split(',');
       ValueModelClass valueModelClass = new ValueModelClass()
       {
           destinationValue = new List<string> { data[0] },
           sourceKey = new List<string> { data[1] },
           rule = data[2],
           description = data[3],
           name = data[4]
       };

       if (listValues.Any(x => x.name == data[4] && x.description == data[3] && x.rule == data[2]))
       {               
           var i = listValues.FindIndex(x => x.name.Equals(valueModelClass.name));
           listValues[i].destinationValue.Add(data[0]);
           listValues[i].sourceKey.Add(data[1]);
       }
       else
       {
           listValues.Add(valueModelClass);
       }
    }