Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当列表包含x,y,z时,为什么list.Contains(x)找不到x_C# - Fatal编程技术网

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是一本
    字典
如果异常仅包含一个元素,则Contains不会识别accountNodeID何时位于异常

如果异常由2+个元素组成,则当accountNodeID位于异常中时,Contains无法识别

Visual Studio调试器的屏幕截图[由于我必须创建一个新帐户,所以不允许我在此处发布:(]:

有人能告诉我以下情况吗

  • 为什么Contains不承认accountNodeID异常中的几个元素之一——就我所知,我的代码显然与我能找到的所有示例都相似
  • 如何防止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))