2014-02-27 33 views
2

被接受给出的第一个完整的答案list.Contains(X)没有找到X。为什么当列表中包含X,Y,Z

感谢所有谁回答!


我是C#和Visual Studio的新手,所以原谅我,如果这是一个基本问题。

if (!exceptions.Contains(accountNodeID)) 
{ 
    dummyTotals.Add(accountNodeID, accountNodeTotal); 
} 
  • 例外List<string>
  • accountNodeIDstring
  • dummyTotalsDictionary<string, int>

如果例外只包含一个元素,包含确认何时accountNodeID例外

如果例外由2+元素,包含不承认当accountNodeID例外

的Visual Studio调试器截图[哪那么将不允许因为我要创建一个新帐户:(我在这里发表]:

谁能告诉我以下几点?

  1. 为什么Cont AINS不承认accountNodeID是一个几元间的例外 - 我的代码看起来确实像所有的例子我能找到的,到目前为止,我可以告诉
  2. 如何防止accountNodeID从被添加到dummyTotals当它是几元间的例外

很开心根据需要提供更多的相关信息,!非常感谢!!!


编辑

谢谢你的已经被提供的信息。我现在正在查看它。为了记录在案,下面是如何被创建的列表(遍历节点在一个XML文件,并使用添加)。

 List<string> dummyList = new List<string>(); 

     while (exceptionsIterator.MoveNext()) 
     { 
      exceptions.Add(exceptionsIterator.Current.Value); 

     } 

我认为这是添加列表元素,而不是将值连接到一个字符串。


编辑

查看答案为最终解决这个问题我最后的意见。

+0

我们需要看到你的代码创建'exceptions'和'dummyTotals'。最小可行示例应该可以帮助我们。只要您提供代码,问题就会进入重新打开队列。 –

+4

在你的第一个屏幕截图,' “139”'是*不* exceptions'的'的元素。字符串'“541 139 434”'是。 –

+4

他已经提供了代码actually.and的原因是很清楚。 –

回答

4

你调试屏幕截图显示例外只包含一个元素:“541 139 434”

enter image description here

因此故障必须处于异常的填充方式。

当您添加到List<string>,您可以通过调用.Add(string)这样做。 我怀疑有这样的代码:

List<string> exceptions = new List<string>(String.Join(" ", accountNodeIds)); 

这并不是填充列表的方式。相反:

List<string> exceptions = new List<string>(accountNodeIds); 

exceptions.AddRange(accountNodeIds); 

foreach (string accountNodeId in accountNodeIds) { 
    exceptions.Add(accountNodeId); 
} 
+0

你能告诉我在while循环中我的*添加*与foreach中的*添加*不同吗?请参阅原始帖子中的修改。 – Skip

+0

基于你的代码,我会假设因为exceptionsIterator只包含'“541 139 434”'。它从何而来? – wizulus

+0

谢谢!是的,我得出了同样的结论,因此意识到我选择了一组具有三个值的节点,而不是在每个节点上正确地迭代。你也正确地指出,var只包含一个字符串值而不是三个,我应该马上看到它。再次感谢! – Skip

1

List.Contains只是loooks如果对象内部等于另一个对象,在字符串的情况下,它看起来好像整个字符串匹配。因为“541 139 434”是不一样的“139”你正在寻找一个字符串。

您可以使用String.ContainsEnumerable.Any

if (!exceptions.Any(e => e.Contains(accountNodeID))) 
{ 
    dummyTotals.Add(accountNodeID, accountNodeTotal); 
} 

你也可以检查的字符串中的“词”一个(由空格隔开)就是你要找的人,因此使用String.Split

if (!exceptions.Any(e => e.Split().Contains(accountNodeID))) 
{ 
} 
1

因为它看起来的确切match.Instead你应该使用Any,以检查你的任何元素是否包含accountNodeId

if (!exceptions.Any(x => x.Contains(accountNodeID)) 

还是不做this.Store你Ids seperately到您的List。每个项目必须包含一个Id。然后你可以使用Contains,你会得到预期的结果。

相关问题