代码之家  ›  专栏  ›  技术社区  ›  Andrus

如何修复无法访问的代码删除警告

  •  0
  • Andrus  · 技术社区  · 9 年前

    dbLinq XMl映射源。cs包含代码:

        public void ReadEmptyContent(XmlReader r, string name)
        {
            if (r.IsEmptyElement)
                r.ReadStartElement(name, DbmlNamespace);
            else
            {
                r.ReadStartElement(name, DbmlNamespace);
                for (r.MoveToContent(); r.NodeType != XmlNodeType.EndElement; r.MoveToContent())
                {
                    if (r.NamespaceURI != DbmlNamespace)
                        r.Skip();
                    throw UnexpectedItemError(r);
                }
                r.ReadEndElement();
            }
        }
    

    这会导致编译警告

    警告CS0162检测到无法访问的代码

    在生产线上

                for (r.MoveToContent(); r.NodeType != XmlNodeType.EndElement; r.MoveToContent())
    

    ( https://github.com/DbLinq/dblinq2007/blob/d7a05bb452b98fd24bca5693da01ecfecd4f3d40/src/DbLinq/Data/Linq/Mapping/XmlMappingSource.cs#L176 )

    在for子句的第三部分 r.MoveToContent() 它看起来像正常的节点遍历代码,并且到达了for的第三部分。

    如何解决此问题? 使用.NET 4

    2 回复  |  直到 9 年前
        1
  •  2
  •   Rawling isekaijin    9 年前

    您永远不会执行增量步骤,因为循环的第一次运行总是抛出异常。

        2
  •  0
  •   Darrell    9 年前

    正如Rawling所说,无论发生什么情况,您都会抛出异常。

    尝试将循环更改为:

    for (r.MoveToContent(); r.NodeType != XmlNodeType.EndElement; r.MoveToContent())
                {
                    if (r.NamespaceURI != DbmlNamespace)
                        r.Skip();
                    else
                        throw UnexpectedItemError(r);
                }
    

    这将解决您的问题。