[c#] 배열의 인덱스가 존재합니까

나는 직장에서 정말 나쁜 냄새가 나는 코드를 물려 받았습니다. 가능한 가장 고통스럽지 않은 해결책을 찾고 싶습니다.

임의의 숫자가 배열에서 유효한 요소인지 확인하는 방법이 있습니까?

예-array [25]가 있는지 확인해야합니다.

바람직하게는 행을 찾기 위해 배열을 통해 foreach ()를 수행하지 않고이 작업을 수행하는 것이 좋습니다.

이 작업을 수행하는 방법이 있습니까, 아니면 foreach 루프가 붙어 있습니까?



답변

길이 테스트

int index = 25;
if(index < array.Length)
{
    //it exists
}


답변

LINQ를 사용하여이를 달성 할 수도 있습니다.

var exists = array.ElementAtOrDefault(index) != null;


답변

“유효한 요소”란 정확히 무엇을 의미합니까? 다음과 같이 할 수 있습니다.

if (array.Length >= 26)

이는 25가 배열에 대한 유효한 인덱스인지 여부를 알려줍니다 (하한이 0이라고 가정).

null이 아닌지 여부를 알아야하는 경우 다음을 사용하십시오.

if (array[25] != null)

(또는 둘의 조합).

이것이 도움이되지 않는다면 문제에 대해 “유효”라는 더 정확한 의미를 제공하십시오.


답변

항목이 null이 아닌지 확인하고 싶다고 가정합니다.

if (array.Length > 25 && array[25] != null)
{
    //it exists
}


답변

// I'd modify this slightly to be more resilient to a bad parameter
// it will handle your case and better handle other cases given to it:

int index = 25;

if (index >= 0 && index < array.Length)
{
    // Array element found
}


답변

배열의 길이를 사용하고 임의의 숫자가 해당 범위에 맞는지 확인할 수 있습니다. 예를 들어, 크기가 10 인 배열이있는 경우 25가 10보다 작지 않기 때문에 array [25]는 유효하지 않습니다.


답변

오히려 List를 사용하여 존재 여부를 확인할 수 있습니다.

List<int> l = new List<int>();
l.Add(45);
...
...

if (l.Count == 25) {
  doStuff();
}
int num = 45;
if (l.Contains(num)) {
  doMoreStuff();
}