C# 当列表包含x,y,z时,为什么list.Contains(x)找不到x
接受给出的第一个完整答案 感谢所有回应的人C# 当列表包含x,y,z时,为什么list.Contains(x)找不到x,c#,C#,接受给出的第一个完整答案 感谢所有回应的人 我是C#和Visual Studio的新手,如果这是一个基本问题,请原谅我 if (!exceptions.Contains(accountNodeID)) { dummyTotals.Add(accountNodeID, accountNodeTotal); } 异常是一个列表 accountNodeID是一个字符串 dummyTotals是一本字典 如果异常仅包含一个元素,则Contains不会识别accountNodeID何时位
我是C#和Visual Studio的新手,如果这是一个基本问题,请原谅我
if (!exceptions.Contains(accountNodeID))
{
dummyTotals.Add(accountNodeID, accountNodeTotal);
}
- 异常是一个
列表
- accountNodeID是一个
字符串
- dummyTotals是一本
字典
编辑 感谢您已经提供的信息。我现在正在查看它。下面是创建列表的方式(在XML文件中的节点上迭代并使用Add)
List dummyList=new List();
while(exception迭代器.MoveNext())
{
exceptions.Add(exception迭代器.Current.Value);
}
我认为这是添加列表元素,而不是将值连接到字符串上
编辑
关于这个问题的最终解决方案,请参阅我对答案的最后评论。您的调试屏幕截图显示异常只包含一个元素:“541 139 434” 因此,错误一定在于异常的填充方式 当您添加到
列表中时,可以通过调用.add(string)
进行添加。
我怀疑有这样的代码:
List<string> exceptions = new List<string>(String.Join(" ", accountNodeIds));
或
如果其中的对象等于另一个对象,则只需确定,如果是字符串,则会查看整个字符串是否匹配。您正在查找子字符串,因为“541 139 434”与“139”不同
您可以将String.Contains
与可枚举一起使用。任何:
if (!exceptions.Any(e => e.Contains(accountNodeID)))
{
dummyTotals.Add(accountNodeID, accountNodeTotal);
}
您还可以检查字符串中的一个“单词”(用空格分隔)是否是您要查找的单词,因此请使用string.Split
:
if (!exceptions.Any(e => e.Split().Contains(accountNodeID)))
{
}
因为它查找的是精确的匹配项。相反,您应该使用Any
,以检查您的任何元素是否包含您的accountNodeId
:
if (!exceptions.Any(x => x.Contains(accountNodeID))
或者不要这样做。将你的Id
分别存储到你的列表中
。每个项目都应该包含一个Id
。然后你可以使用包含
,你将得到预期的结果。我们需要查看你创建异常
和dummyTotals
的代码。一个最简单的可行示例应该对我们有所帮助。Soon您可以提供代码,问题将进入重新打开队列。在您的第一个屏幕截图中,“139”
不是异常的元素。字符串“541 139 434”
是。他实际上已经提供了代码。原因很清楚。@Selman22:提名重新开放。我也认为,通过提供的信息,这个问题可以得到很好的回答;我已经在我的评论中描述了观察到的问题的原因。@O.R.Mapper是的,我正要写一个答案。但问题在我按下之前就结束了按钮:)你能告诉我while循环中的外接程序与foreach中的外接程序有何不同吗?请参阅原始帖子中的编辑。基于您的代码,我假设Exception迭代器只包含“54113434”
。它是从哪里来的?谢谢!是的,我得出了相同的结论,因此意识到我是同时选择一组具有所有三个值的节点,而不是正确地迭代每个节点。您还正确地指出,var只包含一个字符串值,而不是三个,我应该马上看到。再次感谢!这是我的荣幸:)
foreach (string accountNodeId in accountNodeIds) {
exceptions.Add(accountNodeId);
}
if (!exceptions.Any(e => e.Contains(accountNodeID)))
{
dummyTotals.Add(accountNodeID, accountNodeTotal);
}
if (!exceptions.Any(e => e.Split().Contains(accountNodeID)))
{
}
if (!exceptions.Any(x => x.Contains(accountNodeID))