تمر في الصفيف لتحديد القضية
-
19-09-2019 - |
سؤال
قد يكون هذا سؤالا كثيفا وأنا لا أجد أنه 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
الحيلة هي "صحيح" في السطر الأول من التحديد.