阵列索引是否存在

spl*_*tto 75 c# arrays indexing

我在工作中继承了一些非常难闻的代码.我希望找到最无痛的解决方案.

有没有办法检查某个任意数字是否是数组中的有效元素?

示例 - 我需要检查数组[25]是否存在.

我更喜欢这样做而不通过数组执行foreach()来找到行.

有没有办法做到这一点,还是我坚持使用foreach循环?

Eoi*_*ell 129

测试长度

int index = 25;
if(index < array.Length)
{
    //it exists
}
Run Code Online (Sandbox Code Playgroud)

  • 确保索引> = 0. (8认同)
  • 谢谢.我无法相信我没有想到.Length财产! (3认同)
  • 并确保数组本身不为null :) (2认同)

Shi*_*mmy 78

您也可以使用LINQ实现这一目标:

var exists = array.ElementAtOrDefault(index) != null;
Run Code Online (Sandbox Code Playgroud)

  • 小注,`new object [] {null} .ElementAtOrDefault(index)`将返回`null`,因为0**处的元素是**`null`.使用`ElementAtOrDefault`不是检查数组索引*存在*的一个很好的解决方案,添加到结尾的相等检查会使结果不确定. (5认同)
  • 谢谢,这是我正在寻找的,而不是笨拙的阵列长度检查. (3认同)
  • @ChrisMarisic你是对的,如果你想检查存在只做`array.Length> index`. (2认同)
  • @ChrisMarisic,实际上这是一个主要说明,像这样的解决方案将导致隐藏的错误 (2认同)

Jon*_*eet 17

你究竟是什么意思"是一个有效的元素"?你可以这样做:

if (array.Length >= 26)
Run Code Online (Sandbox Code Playgroud)

这将告诉你25是否是数组的有效索引(假设0下限).

如果你需要知道它是否为空,只需使用:

if (array[25] != null)
Run Code Online (Sandbox Code Playgroud)

(或两者的组合).

如果这些没有帮助,请为您的问题提供更准确的"有效"含义.

  • 对于第二个例子我得到了这个.`索引超出了数组的范围 (3认同)
  • @raheel:那么听起来你本应该使用第一个测试而不是...... (3认同)

Mar*_*ris 10

假设您还想检查该项是否为空

if (array.Length > 25 && array[25] != null)
{
    //it exists
}
Run Code Online (Sandbox Code Playgroud)


the*_*erm 5

// 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
}
Run Code Online (Sandbox Code Playgroud)