我想写一些条件检查,而不必使用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]
,我会得到Index Out of Range异常。问题是可能有2个元素,其中一个(或两个)可能有空的Object数组。只有当其中一个Item字符串不为空时,才必须执行代码。
希望我能解释清楚。如何避免在任何条件下避免异常?
答案 0 :(得分:3)
好的,你需要一些更好的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
}
}
是不可接受的。
首先,让我们进行空检查
if (array != null)
{
if (array.Element != null)
为简单起见,您可以使用&&
if (array != null && array.Element != null)
然后,在if if中,我们使用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
}
答案 1 :(得分:0)
你可以这样做:
if(array.Element[0] != null || array.Element[1] != null){
//execute code
}
答案 2 :(得分:0)
您的代码可能需要重构。
我认为它可以这样工作:
var obj = array.Element.FirstOrDefault(x => x.Object.Length > 0);
if (obj != null)
{
if (obj.Object[0].Item.Length != 0)
{
// do whatever is necessary
}
}
答案 3 :(得分:0)
使用短路&&
将两个测试放在一起,以便在第一个测试失败时不进行第二次测试:
object element0 = array.Element[0].Object;
object element1 = array.Element[1].Object;
// Ensure at least one Object array has a non-empty value.
if ((element0.Length > 0 && !string.IsNullOrEmpty((string)element0.Object[0].Item))
|| (element1.Length > 0 && !string.IsNullOrEmpty((string)element1.Object[1].Item)))
{
// ...
}
我认为导致异常的是Object[1]
- 你不清楚这一点。如果Element[1]
导致异常(或两者),那么您需要预先测试数组的长度:
if ((array.Element[0].Length != 0 && HasValue(array.Element[0].Object))
|| (array.Element[1].Length > 1 && HasValue(array.Element[1].Object)))
{
// ...
}
// <summary>
// Returns true if the specified string array contains a non-empty value at
// the specified index.
// </summary>
private bool HasValue(System.Array array, int index)
{
return array.Length > index &&
!string.IsNullOrEmpty((string)array.Object[index].Item);
}
答案 4 :(得分:0)
我认为您可以在第一次检查之前将支票放入。
if (array.Length > 1 && 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
}
}
如果您的阵列没有两个元素,这应该只是短路。
答案 5 :(得分:0)
for (long i = 0; i <= (output3.Length); i++)
{
output1.WriteByte(output3[i]); -----> index out of range exception correct it
output1.WriteByte(output3rx[i]);
}