List.Contains()没有检测到字符串

时间:2015-11-25 20:08:46

标签: c# list

正如标题所示我的名单" Cvqt"包含不同的字符串,例如"1 maxHearts Player",我试图检查它是否包含" maxHearths " + name(当某些东西进入播放器的方法时已经设置了)我试过但是那里的断点和它显示的播放器所以这不是问题,但它只会跳过if语句。这里是代码

if (Cvqt.Contains(" maxClubs " + name))
{
    Cvqt.Remove(maxClubs.ToString() + " maxClub " + name);
}
else 
{
    maxClubs = j;
    Cvqt.Add(maxClubs + " maxClubs " + name); 
}                           
if (Cvqt.Contains(" clubs " + name))
{
    Cvqt.Remove(clubs.ToString() + " clubs " + name);
    clubs--;
}
else 
{
    Cvqt.Add(clubs + " clubs " + name); 
}

3 个答案:

答案 0 :(得分:1)

当您在ContainsList<string>时,它只检查列表中是否包含 完全匹配 的字符串。传入,它不会做部分匹配。

如果你想要部分匹配,你需要做一些更复杂的事情,比如

if (Cvqt.Any(x=>x.Contains(" maxClubs " + name)))
{
    Cvqt.Remove(maxClubs.ToString() + " maxClub " + name);
}

var item = Cvqt.FirstOrDefault(x => x.Contains(" maxClubs " + name));
if (item != null)
{
    Cvqt.Remove(item);
}

如果您想使用maxClubs删除找到的项而不是特定字符串。

这两种方法的作用是在每个项目上调用String.Contains而不是整个列表中的List<T>.Contains,这就是你在做什么。执行List<T>.Contains(T t1)与在列表中的每个项目上执行Object.Equals(T t1, T listItem)相同。

答案 1 :(得分:0)

与List对象相关的包含在字符串列表中查找整个字符串。

您正在寻找&#34; max俱乐部&#34;作为子串。这就是&#34;包含&#34;关闭字符串对象

示例:

List<string> x = new List<string>(){"Hello", "goodbye"};
bool y = x.Contains("good"); // will be false
y = x.Contains("goodbye"); // will be true

y = x[0].Contains("Hell"); // will be true

你可能正在寻找这样的东西:

List<string> stringsWithMaxClubs = Cvqt.Where(argString => argString.Contains(" maxClubs " + name)).ToList();

答案 2 :(得分:0)

当您正在搜索maxClubs + " maxClubs " + name时,您的列表会以" maxClubs " + name的形式包含字符串。列表中没有与此完全匹配的元素(除非maxClubs为空字符串)。

您可以根据需要使用Linq Any

if (Cvqt.Any(x => x.Contains(" maxClubs " + name)))
{
}