سؤال

لست متأكدا مما إذا كان هذا صحيح C #، ولكن نأمل أن تحصل على الفكرة. :)

switch (msg.GetType()) {
    case ClassA:
        // blah
    case ClassB:
        // blah 2
    case ClassC:
        // blah 3
}

كيف يمكنني تشغيل نوع كائن ولكن باستخدام VB.NET Select Case?

أنا أدرك أن البعض قد يقترح استخدام تعدد الأشكال, ، لكنني أستخدم تسلسل هرمي لفئات الرسائل الصغيرة بحيث لا يعمل حقا في حالتي.

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

المحلول

مع VB 2010، بالنسبة للمشاريع التي تستهدف .NET Framework 4 والإصدارات الأحدث، يمكنك الآن القيام بذلك:

Select Case msg.GetType()
    Case GetType(ClassA)
End Select

في إصدارات VB السابقة، لم تنجح لأنك لا تستطيع مقارنة نوعين بالمساواة. يجب عليك التحقق مما إذا كانت تشير إلى نفس المرجع باستخدام الكلمة الأساسية. لا يمكن القيام بذلك في حالة مختارة، ما لم تستخدم خاصية من النوع مثل الاسم أو الاسم الكامل للمقارنة، كما اقترح Michael. يمكنك استخدام مزيج من IF و ElseIf على الرغم من:

Dim type = msg.GetType()
If type Is GetType(ClassA)
    ...
ElseIf type Is GetType(ClassB)
    ...
...
End If

نصائح أخرى

حسنا، إذا أصرت على استخدام حالة تحديد، فيمكنك دائما الذهاب مع:

Select Case True
    Case TypeOf msg Is ClassA
        ' do something '
    Case TypeOf msg Is ClassB
        ' do something else '
    Case Else
        ' and so on '
End Select

لكنني أتصور معظم الناس يحبون تجنب هذا النوع من الأشياء. إذا / سيليف ربما يكون أكثر وضوحا.

هذه طريقة للتعامل مع الأحداث النقدية من Button1 و Button2 في نفس الفرعية (بدأت كمبرمج VB6، لذلك هذا بديل جيد لمناولة VB6 من صفائف التحكم)

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
                Select Case True
                    Case sender Is Me.Button1
                        ' Do Button1 stuff '
                    Case sender Is Me.Button2
                        ' Do Button2 stuff '
                End Select
            End Sub

لن أفعل على الإطلاق select case true, ، ولكن يمكنك القيام بذلك:

Select Case msg.GetType.Name
    Case GetType(ClassA).Name
        ...
    Case GetType(ClassB).Name
        ...
    Case Else
        ...
End Select

وهو نظافة ثقيلة النظر من هذا:

If msg.GetType Is GetType(ClassA) Then
    ...
ElseIf msg.GetType Is GetType(ClassB) Then
    ...
Else
    ...
End If

هذه:

Dim a As Object = New TextBox

Select Case True
    Case TypeOf a Is TextBox
        MsgBox("aaa")

    Case TypeOf a Is ComboBox

    Case TypeOf a Is ListBox

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