Frage

Zur Zeit versuche ich in dem Hafen einig VB.NET-Code in C #.

Die Struktur sieht wie folgt in VB.NET:

Public Structure sPos
    Dim x, y, z As Single
    Function getSectorY() As Single
        Return Math.Floor(y / 192 + 92)
    End Function
    Function getSectorX() As Single
        Return Math.Floor(x / 192 + 135)
    End Function
    Function getSectorXOffset() As Int32
        Return ((x / 192) - getSectorX() + 135) * 192 * 10
    End Function
    Function getSectorYOffset() As Int32
        Return ((y / 192) - getSectorY() + 92) * 192 * 10
    End Function
End Structure

C # Version der Struktur:

    public struct sPos
    {
        public float x;
        public float y;
        public float z;
        public float getSectorY()
        {
            return (float)Math.Floor(y / 192 + 92);
        }
        public float getSectorX()
        {
            return (float)Math.Floor(x / 192 + 135);
        }
        public Int32 getSectorXOffset()
        {
            return (int)((x / 192) - getSectorX() + 135) * 192 * 10;
        }
        public Int32 getSectorYOffset()
        {
            return (int)((y / 192) - getSectorY() + 92) * 192 * 10;
        }
    }

Warum muss ich die Rückgabewerte werfen müssen float & int? In der vb Version habe ich nicht ..

Danke an alle.

War es hilfreich?

Lösung

Setzen Sie ein () nach getXSectorOffset, weil es eine Funktion ist?

Beispiel:

nullPointX = pictureBox1.Width / 2 - sectorsize - centerPos.getSectorXOffset() / 10 * sectorsize / 192;

Im Hinblick auf die zweite Frage, man konnte Guss vermeiden mit dieser Änderung zu schweben:

public float getSectorY()
    {
        return (float)Math.Floor(y / 192f + 92f);
    }

Und sorry, werden Sie noch int werfen müssen. Sofern Sie die x und getXOffset() int während der Funktion Stimmen:

public Int32 getSectorXOffset()
    {
        return (((int)x / 192) - (int)getSectorX() + 135) * 192 * 10;
    }

Andere Tipps

Beachten Sie, dass Sie sollten nicht „Dim“ auf Klasse / Strukturebene Variablen verwenden. Verwenden Sie immer öffentliche, geschützte, private etc.

Beachten Sie auch, dass Teilung anders in VB und C # funktioniert. In VB, wenn Sie teilen zwei ganze Zahlen wie folgt:

Dim r As Double = 5/2

Dann wird r ein Doppel sein mit dem Wert 2,5

In C # jedoch, Division mit ganzen Zahlen gibt Sie ganzzahlige Ergebnisse, 2 in diesem Fall.

Wenn Sie Option Strict On in Ihrem VB-Code (die Sie sollten wirklich zu immer zu tun), dann denke ich, müssen Sie die Rückgabewerte in VB werfen auch: Math.Floor () gibt ein Double, kein Single, und Sie sollten wirklich den Compiler sagen, dass Sie diese Präzision verlieren wollte (was die (float), gegossen in der C # Version der Fall ist) lassen, anstatt den Compiler werfen Präzision weg, ohne dass Sie eine fundierte Entscheidung treffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top