C# 我知道索引超出了数组的范围,但我想用它做点什么?

C# 我知道索引超出了数组的范围,但我想用它做点什么?,c#,arrays,C#,Arrays,我想使用该值,但我得到的索引超出了数组的边界。那么我该怎么办?该值不存在(即数组中该点没有任何东西,实际上,数组不跨越该长度),这就是点。您可能忽略了数组是基于零索引的,并且,如果数组部分定义得很好,您可能真的需要filefile[10] string[] filefile = dr["Path_XBRL"].ToString().Split('\\', '-'); if (filefile[11] == null) { string yes = "oke"; } 如

我想使用该值,但我得到的索引超出了数组的边界。那么我该怎么办?

该值不存在(即数组中该点没有任何东西,实际上,数组不跨越该长度),这就是点。您可能忽略了数组是基于零索引的,并且,如果数组部分定义得很好,您可能真的需要
filefile[10]

string[] filefile = dr["Path_XBRL"].ToString().Split('\\', '-');  

if (filefile[11] == null)
  { 
     string yes = "oke";
  }
如果检查此语句,您将看到数组包含的元素少于11个。如果您想检查,您可以执行以下操作:

string[] filefile = dr["Path_XBRL"].ToString().Split('\\', '-');  

您还可以使用
ElementAtOrDefault
来避免索引外异常

if (filefile.Length >11 && string.IsNullOrEmpty(filefile[11]))
{ 
    string yes = "oke";
}

ElementAtOrDefault
如果索引11I中没有选中元素,则不会返回null。它说如果没有元素,它将返回默认值index@AbZy:引用类型的默认值为null。我仍然得到索引超出了数组的边界,原因是filefile数组始终为[0]-[10],但当我使用(filefile.Length>=11)时,它只起作用:)很难相信,因为filefile.Length>=11是首先计算的。如果测试失败(即为false),则第二个条件(filefile[11]==null)将不再被计算。@Adi yes首先计算左侧,并打算首先计算左侧;如果索引大小小于11,则不采取任何操作。如果是11,则检查11处的元素是否为null或空。@Adi轻微问题:array.length=元素计数,但由于数组是基于0的,filefile[11]是元素12。@daryal当filefile.length==11时,您的检查仍然会抛出边界外异常,请更新。始终尝试避免硬编码索引。。)filefile元素总是0-10,但是如果元素增加1,我想做点什么(这意味着filefile[11]:)我一般来说。首先,硬编码索引是可用的。第二,你永远不知道数组长度/元素顺序什么时候会改变(特别是当你使用第三方库时)。所以,当我想这样做的时候,我应该怎么做?为了避免神奇的数字,你应该用命名常量替换它们。所以,若你们必须找到数组中的第十一个元素,你们最好定义常量:
const int needededIndexToassignoke=11//一些糟糕的名字
并使用一个
文件[needededIndexToAssignoke]
if (filefile.ElementAtOrDefault(11) == null)
{}