سؤال

قد يكون هذا سؤالا كثيفا وأنا لا أجد أنه DUP هذا, ، لكنني بحاجة إلى بعض المساعدة في فهم ما إذا كان يمكن استخدام صفيف في عبارة تحديد حالة.

لدي روتين فرعي سأقوم بإنشاء صفيف سلسلة ديناميكيا. يتم سرد XML أيضا، لكن يمكن أن يكون أي من القيم المذكورة أدناه. سيكون شيء مثل هذا:

Dim offensiveLine() As String = New String() {"center", "right wing", "left wing"}
Dim defensiveLine As String = "defense"
Dim playerInfo = <Player><Name>John</Name><Position val="right wing"/></Player>

ما أريد القيام به هو معرفة ما إذا كان هذا اللاعب في أحد الطرد. لذلك أنا أقول:

Dim playerPosition = playerInfo.Position.@val
Select Case playerPosition
Case offensiveLine
'do something
Case defensiveLine
'do something
Case Else 
'do nothing
End Select

هنا يكمن المشكلة: Case offensiveLine غير صالح. وأنا أعلم أنني أستطيع الكتابة Case "center", "right wing", "left wing", ، ولكن هذا من شأنه أن يهزم الغرض من ما أحاول القيام به، وهو ما يقوم بإجراء متغير معمم وهو صفيف يمكن قراءته من خلال بيان الحالة. ثانيا، أعلم أنني لا أستطيع إنشاء متغير مثل Dim offensiveLine = ""center", "right wing", "left wing"" وتمرير ذلك في.

أي نظرة ثاقبة حول كيفية إمكانية أن تكون قادرا على المرور في صفيف إلى بيان القضية ولديها كل منها تقييم؟

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

المحلول

ال Select..Case بناء لا يعمل هكذا. ومع ذلك، فمن السهل اختبار ما إذا كان عنصر موجود في صفيف:

If offensiveLine.Contains(playerPosition) Then
    'Do something
ElseIf defensiveLine.Contains(playerPosition) Then
    'Do something else
End If

نصائح أخرى

قد ترغب في التفكير في استخدام جملة إذا كان هنا بدلا من التبديل. جرب هذا المنطق: إذا كان OffenSiveline يحتوي على لاعب، فضع خط مسيء، إلخ.

يمكنك فعلا استخدام الاختيار / التبديل:

Dim playerPosition = playerInfo.Position.@val
Select Case True
Case offensiveLine.Contains(playerPosition)
    'do something
Case defensiveLine.Contains(playerPosition)
    'do something
Case Else 
    'do *something* - otherwise you don't need the 'Case Else'
End Select

الحيلة هي "صحيح" في السطر الأول من التحديد.

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