سؤال

وحاليا أحاول أن ميناء بعض رمز VB.NET إلى C #.

ووالبنية يشبه هذا في 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 # إصدار البنية:

    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;
        }
    }

وماذا يجب أن يلقي القيم العودة إلى تعويم وكثافة العمليات؟ في النسخة رموز ليس لدي ل..

وشكرا للجميع.

هل كانت مفيدة؟

المحلول

ووضع () بعد getXSectorOffset لأنها وظيفة؟

وعلى سبيل المثال:

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

وفيما يتعلق بالسؤال الثاني، هل يمكن تجنب المدلى بها لتعويم مع هذا التعديل:

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

وآسف، سيكون لديك للادلاء إلى int لا يزال. إلا إذا كنت يلقي x وgetXOffset() إلى int خلال وظيفة:

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

نصائح أخرى

ملحوظة التي يجب أن لا تستخدم "خافت" على متغيرات مستوى الفئة / هيكل. دائما استخدام العام، المحمية، الخاصة وغيرها.

ونلاحظ أيضا أن تقسيم يعمل بشكل مختلف في VB و C #. في VB، إذا قمت بتقسيم عددين مثل ذلك:

Dim r As Double = 5/2

وثم ص ستكون مزدوجة مع قيمة 2.5

في C # ومع ذلك، وتقسيم مع الأعداد الصحيحة يمنحك عدد صحيح النتائج، و 2 في هذه القضية.

إذا قمت بتعيين على خيار صارمة على في كود VB الخاص بك (التي كنت حقا يجب أن <م> دائما تفعل) ثم أعتقد كنت بحاجة للادلاء القيم المرجعة في VB وكذلك: Math.Floor () بإرجاع مزدوجة، وليس واحدة، ويجب أن أقول حقا المترجم أن أردت أن تفقد الدقة (وهو ما تعويم) الزهر (في C # نسخة لا) بدلا من السماح للمترجم رمي الدقة بعيدا دون أن جعل قرار مستنير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top