문제

이것은 조밀 한 질문 일 수 있으며 나는 그것이 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

다른 팁

스위치 대신 if 절을 사용하는 것을 고려할 수 있습니다. 이 논리를 시도해보십시오 : Fipensiveline이 PlayerPosition, Offensive Line 등이 포함 된 경우.

실제로 선택/스위치를 사용할 수 있습니다.

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