我希望这是一个快速的问题。我有带有“路径”属性的项目列表。我使用以下行:
docReturnResult.RemoveAll(x => !x.DocumentPath.Contains(library));
这确实删除了我需要的项目,但是我遇到了问题。如果library的值为“ Non Archive”,并且我在docReturnResult列表中有两个项目,一个在路径中带有“ / Non Archive /”,另一个具有“ / Archive /”,则将它们都删除。我只想删除与库的整个值不匹配的项目,所以我只希望删除“ / Archive /”而不是全部删除。如何指定确切值?
谢谢。
答案 0 :(得分:0)
您正在寻找
docReturnResult.RemoveAll(x => !x.DocumentPath.Equals(library));
我使用Equals而不是==的原因是==是参考检查,询问对象是否为相同的参考。 其中“等于”仅验证对象的值。 因此,具有相同内容的两个不同对象引用将仍然相等,==运算符将返回false,因为引用标识符不相同。 如果我错了,我敢肯定有人比我有更好的解释:)
更新:
提供的只是确定路径本身的一部分, 我会用'/'上的Split函数分割整个路径 然后检查库是否等于结果数组中的任何值。
稍等片刻,我必须加载Visual Studio来实际调试拆分是否达到了linq中的预期:)
更新2:
using System;
using System.Collections.Generic;
using System.Linq;
public static void Main(string[] args)
{
string one = "http://<site>/Non Archive/<document>";
string two = "http://<site>/Archive/<document>";
char delimiter = '/';
List<string> list = new List<string> { one, two };
string target = "Archive";
foreach (string s in list)
{
Console.WriteLine(s);
}
Console.WriteLine("after remove");
list.RemoveAll(x => x.Split(delimiter).ToList().Any(y => y.Equals(target)));
foreach (string s in list)
{
Console.WriteLine(s);
}
Console.ReadLine();
}
这就是我的意思。我了解您已经修复它。但这仍然可以指导其他有类似问题的人。