C# 从linq中包含整个短语c的列表中删除项#

C# 从linq中包含整个短语c的列表中删除项#,c#,lambda,C#,Lambda,我希望这是一个简短的问题。我有一个带有“路径”属性的项目列表。我使用以下行: docReturnResult.RemoveAll(x => !x.DocumentPath.Contains(library)); 这确实删除了我需要的项目,但是我遇到了问题。如果library的值为“Non-Archive”,并且docReturnResult列表中有两个项目,一个在路径中带有“/Non-Archive/,另一个在路径中带有“/Archive/”,则会同时删除这两个项目。我只想删除与库的整个

我希望这是一个简短的问题。我有一个带有“路径”属性的项目列表。我使用以下行:

docReturnResult.RemoveAll(x => !x.DocumentPath.Contains(library));
这确实删除了我需要的项目,但是我遇到了问题。如果library的值为“Non-Archive”,并且docReturnResult列表中有两个项目,一个在路径中带有“/Non-Archive/,另一个在路径中带有“/Archive/”,则会同时删除这两个项目。我只想删除与库的整个值不匹配的项,所以我只想删除“/Archive/”,而不是同时删除两者。如何指定确切的值

谢谢。

您正在寻找

 docReturnResult.RemoveAll(x => !x.DocumentPath.Equals(library));
我使用Equals而不是==的原因是==是一个引用检查,询问obejct是否是相同的引用。 其中“Equals”仅验证对象的值。 因此,具有相同内容的两个不同对象引用在equals中仍然相等,==运算符将返回false,因为引用标识符不相同。 如果我错了,我相信有人比我有更好的解释:)

更新:

前提是它只决定了路径本身的一部分, 我将使用“/”上的split函数分割整个路径 然后检查库是否等于结果数组中的任何值

给我一秒钟,如果拆分实现了我在linq中所期望的功能,我必须加载visual studio以进行实际调试:)

更新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();

            }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
公共静态void Main(字符串[]args)
{
字符串一=”http:///Non 存档/“;
字符串二=”http:///Archive/";
字符分隔符='/';
列表=新列表{1,2};
string target=“存档”;
foreach(列表中的字符串s)
{
控制台。写入线(s);
}
控制台。写入线(“删除后”);
list.RemoveAll(x=>x.Split(分隔符).ToList().Any(y=>y.Equals(目标));
foreach(列表中的字符串s)
{
控制台。写入线(s);
}
Console.ReadLine();
}
这就是我想说的。我知道你已经修好了。但是,这可能会指导其他有类似问题的人


结果:

它不应该同时移除这两种。如果
library
的值是
Archive
,那么我可以看到两者都被删除。我想你是指lambda表达式?你错了。为相等检查提供值类型语义。1<代码>=使用
字符串。等于(s1,s2)
,它只比较2个引用。这个答案没有帮助,因为OP是在描述一个不存在的问题reproducible@MatthewWatson我并没有责怪自己去测试它,但它看起来是合法的。@TimSchmelter,他的例子说明这永远是字符串吗?您可能有理由推断它,但在他的示例中没有类型规范。它只是显示一个对象“库”。为什么那个对象不能是object类型?为什么一定要用绳子?@MortenBork:好的,现在我有了。但对我来说,
“非存档”
显然是一个字符串:)