0

ここに私のコードがあります

    public bool limitOutput()
    {
        double lowerLeftPointX = m_mapControl.CurrentExtent.LowerLeftPoint.X;
        double lowerLeftPointY = m_mapControl.CurrentExtent.LowerLeftPoint.Y;
        double upperRightPointX = m_mapControl.CurrentExtent.UpperRightPoint.X;
        double upperRightPointY = m_mapControl.CurrentExtent.UpperRightPoint.Y;

        for(int i = locationElements.Count - 1; i >= 0; i--)
        {
            if (Double.Parse(locationElements[i]["GEOMETRY_X"].InnerText) < lowerLeftPointX || Double.Parse(locationElements[i]["GEOMETRY_X"].InnerText) > upperRightPointX || Double.Parse(locationElements[i]["GEOMETRY_Y"].InnerText) < lowerLeftPointY || Double.Parse(locationElements[i]["GEOMETRY_Y"].InnerText) > upperRightPointY)
            {
                locationElements[i].ParentNode.RemoveChild(locationElements[i]);
            }
        }

        if (locationElements.Count == 0)
        {
            PearMessageBox.Show(PearMessageBox.mBoxType.simpleNotification, "No results found in specified area");
            return false;
        }
        return true;


    }

設定した境界内にないすべてのノードを削除しようとしています。削除行は実行されますが、メソッドが実行される前に locationElements をカウントするときはまだ同じ値であるため、実際には削除されません。

コードの何が問題なのかについてのアイデア

4

1 に答える 1

1

この問題はRemoveChild()、要素が source から削除されたXmlDocumentが、事前入力された から削除されなかったことが原因XmlNodeListです。locationElementsしたがって、次のような変数の事前設定に使用されたコードを再度実行する必要があります。

//assume that GetLocationElements() is a method...
//...containing the same logic you used to populate locationElements variable
var updatedLocationElements = GetLocationElements();
if (updatedLocationElements.Count == 0)
{
    PearMessageBox.Show(PearMessageBox.mBoxType.simpleNotification, "No results found in specified area");
    return false;
}
return true;
于 2015-10-01T12:42:32.890 に答える