Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 阵列访问的安全元素_C#_.net_Arrays_Tryparse - Fatal编程技术网

C# 阵列访问的安全元素

C# 阵列访问的安全元素,c#,.net,arrays,tryparse,C#,.net,Arrays,Tryparse,使用扩展方法或LINQ访问数组元素的安全方法是什么,而不抛出indexootfrangeexception,例如TryParse,TryRead public static bool TryGetElement<T>(this T[] array, int index, out T element) { if ( index < array.Length ) { element = array[index]; return true; } eleme

使用扩展方法或LINQ访问数组元素的安全方法是什么,而不抛出
indexootfrangeexception
,例如
TryParse
TryRead

public static bool TryGetElement<T>(this T[] array, int index, out T element) {
  if ( index < array.Length ) {
    element = array[index];
    return true;
  }
  element = default(T);
  return false;
}

如果要安全地循环数组中的元素,只需使用枚举器:

foreach (int item in theArray) {
   // use the item variable to access the element
}
使用该方法。它在不引发异常的情况下处理超出范围的访问。 如果索引无效,则返回默认值

int[] array = { 4, 5, 6 };
int a = array.ElementAtOrDefault(0);    // output: 4
int b = array.ElementAtOrDefault(1);    // output: 5
int c = array.ElementAtOrDefault(-1);   // output: 0
int d = array.ElementAtOrDefault(1000); // output: 0

将此扩展名设为空检查和绑定超出范围检查

public static class ArraySafe
{
    public static bool TryGetElement<T>(this T[] array, int index, out T element)
    {
        if(array == null || index < 0 || index >= array.Length)
        {
            element = default(T);
            return false;
        }

        element = array[index];
        return true;
    }
}

否,我读取了命令行参数,并且必须确保下一个参数存在而不引发异常(无循环退出)。您应该将数组[I]更改为数组[index]。而且,我认为你的逻辑是颠倒的。如果array.Length@Jim,这就是我在咖啡喝完之前发布的内容。修正了输入错误。我还想检查索引>=0。太好了!今天我认识她谢谢
public static class ArraySafe
{
    public static bool TryGetElement<T>(this T[] array, int index, out T element)
    {
        if(array == null || index < 0 || index >= array.Length)
        {
            element = default(T);
            return false;
        }

        element = array[index];
        return true;
    }
}
public void Test()
    {
        int[] intAry = new Int32[10];
        int v;
        if (intAry.TryGetElement(6, out v))
        {
            //here got value
        }
    }