我有一个名为'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"}
答案 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);
}
}