لماذا يجب أن يلقي تتضمن التعدادات لكثافة العمليات في C #؟

StackOverflow https://stackoverflow.com/questions/326098

  •  11-07-2019
  •  | 
  •  

سؤال

وهذا هو قانون بلدي:

internal enum WindowsMessagesFlags {
    WM_EXITSIZEMOVE      = 0x00000232,
    WM_DISPLAYCHANGE     = 0x0000007e,
    WM_MOVING            = 0x00000216,
}

protected override void WndProc(ref Message m) {
    switch(m.Msg) {
        case (int)WindowsMessagesFlags.WM_DISPLAYCHANGE:
            FixWindowSnapping();
            break;
        case (int)WindowsMessagesFlags.WM_EXITSIZEMOVE:
            SaveWindowProperties();
            break;
        case (int)WindowsMessagesFlags.WM_MOVING:
            KeepProperLocation(ref m);
            break;
    }
}

وهناك على أية حال لمنع صب؟

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

المحلول

ونوع من - يلقي m.Msg بدلا من ذلك:

protected override void WndProc(ref Message m) {
    switch((WindowsMessagesFlags) m.Msg) {
        case WindowsMessagesFlags.WM_DISPLAYCHANGE:
                FixWindowSnapping();
                break;
        case WindowsMessagesFlags.WM_EXITSIZEMOVE:
                SaveWindowProperties();
                break;
        case WindowsMessagesFlags.WM_MOVING:
                KeepProperLocation(ref m);
                break;
    }
}

والسبب كنت في حاجة إلى المدلى بها على الإطلاق لأنه في C # تتضمن التعدادات ليست مجرد أرقام - انهم الأرقام المرتبطة نوع. وهذا يمنعك من القيام (بدون الصب):

HttpStatusCode status = someWindowsMessageFlag;

ومن الواضح أن هذا شيء جيد :) عندما كنت بحاجة إلى ذلك، ومع ذلك، يمكن أن تذهب دائما "عبر" نوع الأساسي (الباحث في هذه الحالة).

نصائح أخرى

ما هو Message.Msg يعرف بأنه

وأنا الرهان هو Int32.

وأنا الرهان أيضا WindowsMessagesFlags هو نوع الخاص بك، ولكن الرسالة من هذا الإطار.

وهذا يعني أنك تستخدم التعداد الخاص بك مع كائن المدمج الإطار، وبالطبع فإنها ستكون لدينا بعض التضارب فيما يتعلق بأنواع.

وهناك التعداد هو نوع قوي، وليس فقط <م> عدد ، بل هو رقم مع الاسم في سياق . هذا الاسم، والسياق، عدد، جزء غير متوافق مباشرة مع الأرقام فقط، وهذا هو السبب في أنك بحاجة إلى المدلى بها.

وأحد أسباب ذلك هو بسبب C # حاليا (4.0) لا يسمح لك لكتابة الزائد مشغل الضمني (المدلى بها) ضمن طريقة تمديد (<لأ href = "https://stackoverflow.com/questions/5518468/is -من-ممكن-تحديد-لتمديد مشغل-طريقة "> المتعلقة بمسألة ) لأي نوع بما في ذلك التعداد. سيكون من الجميل لتحويل نظيفة من / Int16 عند دمج مع قاعدة بيانات ضعيفة كتبته على سبيل المثال أو تنسيق التسلسل كتبته ضعيف (الكاتب ثنائي).

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