正如标题所示我的名单" 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);
}
答案 0 :(得分:1)
当您在Contains
上List<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)))
{
}