[C#] złe wyniki przy odejmowaniu

0

Mam taka petle:

while (((PointF)m_aData[m_aData.Count - 2]).X > this.ClientRectangle.Width)
            {
                float delta = ((PointF)m_aData[m_aData.Count - 2]).X - this.ClientRectangle.Width;
               
                MovePoints(delta);
                if (((PointF)m_aData[1]).X < 0.0f)
                    m_aData.RemoveAt(0);
            }

m_aData to ArrayList PointF'ów.

Problem mam taki że źle obliczana jest delta, np. dla wartości: ((PointF)m_aData[m_aData.Count - 2]).X = 293.0 i this.ClientRectangle.Width = 293 delta jest równa 103 [glowa] . I nie wiem czym to może być spowodowane.

Zaczynam dopiero z c# i być może konstrukcja ((PointF)m_aData[m_aData.Count - 2]).X jest zla, ale gdzies sie z tym spotkalem na necie i wydaje mi sie w miare sensowne, nie wiem..

0
klajter napisał(a)

Problem mam taki że źle obliczana jest delta, np. dla wartości: ((PointF)m_aData[m_aData.Count - 2]).X = 293.0 i this.ClientRectangle.Width = 293 delta jest równa 103 [glowa] . I nie wiem czym to może być spowodowane.

Zaczynam dopiero z c# i być może konstrukcja ((PointF)m_aData[m_aData.Count - 2]).X jest zla, ale gdzies sie z tym spotkalem na necie i wydaje mi sie w miare sensowne, nie wiem..

Konstrukcja jest ok. Lepiej użyj List<PointF> a nie ArrayList, wtedy masz kolekcję silnie typowaną i nie potrzebujesz brzydkiego rzutowania. Ale nie to jest źródłem problemu.

Postaw breakpoint'a na wywołaniu MovePoints() i zobacz sobie co dokładnie zawierają składowe w tym kluczowym momencie - najprawdopodobniej jednak coś innego niż piszesz. Poza tym pętla sypnie IndexOutOfRangeException jak zostanie w niej ostatni element i będzie chciała się po raz kolejny przeiterować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1