阵列索引是否存在

时间:2009-04-27 18:43:50

标签: c# arrays indexing

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

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

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

我最好不要在没有通过数组的foreach()来找到行的情况下这样做。

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

12 个答案:

答案 0 :(得分:119)

测试长度

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

答案 1 :(得分:68)

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

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

答案 2 :(得分:15)

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

if (array.Length >= 26)

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

如果您需要知道它是否为空,请使用:

if (array[25] != null)

(或两者的结合)。

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

答案 3 :(得分:8)

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

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

答案 4 :(得分:2)

// 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
}

答案 5 :(得分:1)

您可以使用数组的长度,并查看您的任意数字是否适合该范围。例如,如果您有一个大小为10的数组,则array [25]无效,因为25不小于10.

答案 6 :(得分:1)

您可以使用List,以便检查是否存在。

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

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

答案 7 :(得分:1)

array.length将告诉您数组中有多少元素

答案 8 :(得分:1)

这里的答案很简单,但仅适用于一维数组。 对于多维数组,检查 null 是判断元素是否存在的直接方法。此处的示例代码检查空值。请注意 try/catch 块 [可能] 矫枉过正,但它使块防弹。

public ItemContext GetThisElement(int row,
    int col)
{
    ItemContext ctx = null;
    if (rgItemCtx[row, col] != null)
    {
        try
        {
          ctx = rgItemCtx[row, col];
        }
        catch (SystemException sex)
        {
          ctx = null;
          // perhaps do something with sex properties
        }
    }

    return (ctx);
}

答案 9 :(得分:0)

您可以检查索引是否小于数组的长度。这不会检查空值或其他奇怪的情况,其中索引可以被赋值但是没有明确地给出一个。

答案 10 :(得分:0)

您可以检查数组的长度,看看项目25是否在数组中是有效的,然后您可以使用

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

查看数组项本身是否已设置。

答案 11 :(得分:0)

听起来非常像你使用数组来存储不同的字段。这绝对是代码味道。我会尽量避免使用数组,因为它们通常不适合(或不需要)高级代码。

在短期内切换到简单的词典可能是一个可行的选择。就像使用大型物业包类一样。有很多选择。你现在遇到的问题只是设计不良的一个症状,你应该考虑修复底层问题,而不仅仅是修补糟糕的设计,所以它有点像,现在大部分都有效。