📜  unity C# 捕获索引出或范围异常 - C# (1)

📅  最后修改于: 2023-12-03 15:35:29.242000             🧑  作者: Mango

Unity C# 捕获索引出或范围异常 - C#

在 Unity 开发过程中,我们经常会遇到索引越界或范围异常等异常情况,这些异常会导致程序崩溃。因此,为了确保程序稳定性,我们需要捕获这些异常并进行处理。

捕获索引越界异常
抛出索引越界异常

在编写代码时,我们可以使用 throw new IndexOutOfRangeException() 来抛出索引越界异常。例如:

int[] arr = { 1, 2, 3 };
try
{
    int value = arr[3];
}
catch (IndexOutOfRangeException ex)
{
    Debug.LogError(ex.Message);
}

以上代码中,我们尝试获取数组 arr 的第 4 个元素,由于数组的长度只有 3,因此会抛出索引越界异常。在 catch 语句块中,我们可以输出异常信息或进行其他处理。

使用索引器

除了手动抛出异常外,我们可以使用 C# 索引器来捕获索引越界异常。例如:

public class MyClass
{
    private int[] arr = { 1, 2, 3 };
    public int this[int index]
    {
        get
        {
            if(index < 0 || index >= arr.Length)
            {
                throw new IndexOutOfRangeException(nameof(index));
            }
            return arr[index];
        }
        set { arr[index] = value; }
    }
}

以上代码中,我们定义了一个 MyClass 类,并在其中定义了一个名为 this 的索引器。当索引器的下标超出数组长度范围时,会抛出 IndexOutOfRangeException 异常。

使用 Array 类

当我们使用 Array 类操作数组时,可以使用 GetLength 方法获取数组长度,使用 GetValue 方法获取指定下标的值。例:

int[] arr = { 1, 2, 3 };
try
{
    int value = (int)System.Array.GetValue(arr, 3);
}
catch(System.IndexOutOfRangeException ex)
{
    Debug.LogError(ex.Message);
}
捕获范围异常
抛出范围异常

在编写代码时,我们可以使用 throw new ArgumentOutOfRangeException() 来抛出范围异常。例如:

int value = 10;
try
{
    if(value < 0 || value > 5)
    {
        throw new ArgumentOutOfRangeException(nameof(value));
    }
}
catch (ArgumentOutOfRangeException ex)
{
    Debug.LogError(ex.Message);
}

以上代码中,我们判断变量 value 是否在 [0, 5] 的范围内,如果不是则抛出范围异常。

使用 LINQ

当我们使用 LINQ 进行查询时,也可能会出现范围异常。例如:

List<int> list = new List<int>() { 1, 2, 3 };
try
{
    int value = list.ElementAt(5);
}
catch(ArgumentOutOfRangeException ex)
{
    Debug.LogError(ex.Message);
}

以上代码中,我们尝试获取 list 的第 6 个元素,由于 list 的长度只有 3,因此会抛出范围异常。

总结

在编写 Unity C# 代码时,我们需要时刻注意错误处理。捕获索引越界或范围异常能够有效保证程序的稳定性,避免程序崩溃。以上介绍的捕获异常的方法仅是其中的一部分,使用时需要根据具体情况进行选择。