我想写一些条件下的检查而不必使用try/catch,并且我想避免出现“索引超出范围”错误的可能性

if (array.Element[0].Object.Length > 0 || array.Element[1].Object.Length > 0) //making sure there's at least one Object array that has values
 {
    if (array.Element[0].Object[0].Item.Length != 0 || array.Element[1].Object[0].Item.Length != 0) //this is where I check that at least one of the Items (strings) is not empty
       {
           // execute code here
       }
 }

因此,我面临的问题是在第二次检查中,我需要查看我是否有一个不为空的商品。但是,如果我没有Element[1],则会得到“索引超出范围”异常。问题在于可能有2个元素,并且其中一个(或两个元素)可能具有空的Object数组。仅当其中一个项目字符串不为空时,才必须执行该代码。

希望我能很好地解释。在任何情况下,如何避免出现该异常?

最佳答案

好了,您需要一些更好的null checking和一些更谨慎的代码。

if (array.Element[0].Object.Length > 0 || array.Element[1].Object.Length > 0) //making sure there's at least one Object array that has values
{
   if (array.Element[0].Object[0].Item.Length != 0 || array.Element[1].Object[0].Item.Length != 0) //this is where I check that at least one of the Items (strings) is not empty
   {
       // execute code here
   }
}

是 Not Acceptable 。

首先,让我们进行空检查
if (array != null)
{
    if (array.Element != null)

为了简单起见,您可以使用 &&
if (array != null && array.Element != null)

然后,如果在其中,我们使用for循环(since you're stuck on arrays)并对其进行null检查
for (int i = 0; i < array.Element; ++i)
{
    if (array.Element[i] != null && array.Element[i].Object != null)
    {

然后,由于您具有嵌套数组,因此我们再次循环。这称为nested loop,通常是一种不好的做法,我将在第二秒钟告诉您为什么它起作用。
for (int o = 0; o < array.Element[i].Object.length; ++o)
{
    if (array.Element[i].Object[o] != null && !string.IsNullOrEmpty(array.Element[i].Object[o].Item))
    {

现在,有了所有这些丑陋的嵌套循环,我们发现您的Item不为null。
最重要的是,您可以在此处访问所有潜在值,并可以根据需要对其进行分组。为简化起见,这就是我将整个过程放在一起的方法。
List<string> arrayValues = new List<string>();
if (array != null && array.Element != null)
{
    for (int i = 0; i < array.Element.length; ++i)
    {
        //bool found = false;
        if (array.Element[i] != null && array.Element[i].Object != null)
        {
            for (int o = 0; o < array.Element[i].Object.length; ++o)
            {
                if (array.Element[i].Object[o] != null && !string.IsNullOrEmpty(array.Element[i].Object[o].Item))
                {
                    arrayValues.Add(array.Element[i].Object[o].Item);
                    //if you want to drop out here, you put a boolean in the bottom loop and break and then break out of the bottom loop if true
                    //found = true;
                     //break;
                }
            }
        }
        //if (found)
        //  break;
    }
}
if (arrayValues.Count > 0)
{
    //do stuff with arrayValues
}

关于c# - 防止索引超出范围错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10113680/

10-12 03:21