📜  C# 扩展数组 - C# (1)

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

C#扩展数组 - C#

C#中提供了一种扩展数组的方法,它允许我们通过添加自定义方法来扩展数组类型。这可以让我们在不影响数组类型本身的情况下,添加一些常见的操作方法。

扩展方法

扩展方法是一种静态方法,它允许我们在现有的类型上添加新的方法,而不必使用继承或修改源代码。在C#中,扩展方法是通过在方法声明前面添加this关键字来实现的。以下是一个简单的示例扩展方法:

public static class ArrayExtensions
{
    public static bool IsNullOrEmpty(this object[] array)
    {
        return array == null || array.Length == 0;
    }
}

在这个示例中,我们定义了一个名为IsNullOrEmpty的扩展方法,它接收一个object类型的数组作为参数,并检查该数组是否为空或null。我们使用静态class关键字创建了一个静态类,并在该类中定义了扩展方法。

要使用此扩展方法,我们需要使用该方法的数组对象,如下所示:

object[] myArray = null;
if(myArray.IsNullOrEmpty())
{
    Console.WriteLine("The array is null or empty");
}

在上述示例中,我们使用扩展方法IsNullOrEmpty检查myArray是否为空或null。

扩展示例

以下是一些示例扩展方法,它们可以对数组进行常见操作:

ToList

此扩展方法将数组转换为List<T>对象:

public static List<T> ToList<T>(this T[] array)
{
    return new List<T>(array);
}
Shuffle

此扩展方法随机打乱数组的顺序:

public static void Shuffle<T>(this T[] array)
{
    Random rnd = new Random();
    for(int i = array.Length - 1; i > 0; i--)
    {
        int j = rnd.Next(i + 1);
        T temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}
Flatten

此扩展方法将多维数组平铺为一维数组:

public static T[] Flatten<T>(this T[,] array)
{
    int width = array.GetLength(0);
    int height = array.GetLength(1);
    T[] flattened = new T[width * height];
    int index = 0;
    for (int y = 0; y < height; y++)
    {
        for (int x = 0; x < width; x++)
        {
            flattened[index++] = array[x, y];
        }
    }
    return flattened;
}
总结

通过使用C#中的扩展方法,我们可以轻松添加与数组相关的操作方法,这些方法可以增强数组类型的灵活性和可重用性。以上是一般性的讲解,在实际开发中也可以根据业务需求设计适合自己的扩展方法。