C#中是否可以扩展数组?

24

我习惯于为外部类添加方法,如IEnumerable。但是在C#中我们可以扩展数组吗?

我计划向数组添加一个方法,即使它是多维的,也可以将其转换为IEnumerable。

如何扩展C#中的数组无关。

3个回答

45
static class Extension
{
    public static string Extend(this Array array)
    {
        return "Yes, you can";
    }
}

class Program
{

    static void Main(string[] args)
    {
        int[,,,] multiDimArray = new int[10,10,10,10];
        Console.WriteLine(multiDimArray.Extend());
    }
}

在这个方法中,“this Array array”是什么意思?我认为Array是一个抽象类,那么写“this Array array”到底是在做什么? - VatsalSura
3
这个数组Array表示此Array是要扩展的类型。此Array同样可以是this T,其中该方法将是*public static void Extend<T>(this T obj)*。这个标识符只是给这个类型一个名称,以便在扩展方法中引用它。 - SimonC
@VatsalSura: "this Array array" 指的是“扩展任何类型的数组”,而不是更具体的数组类型,例如 object[]、object[][] 或 object[,](或其他类型,以及泛型,而不是示例类型“object”)。我认为这就是你所询问的内容。 - Rob

41

是的。可以通过扩展已经展示的Array类,或者通过扩展特定类型的数组甚至通用数组来实现:

public static void Extension(this string[] array)
{
  // Do stuff
}

// or:

public static void Extension<T>(this T[] array)
{
  // Do stuff
}

最后一个方法并不完全等同于扩展Array,因为它不能用于多维数组,所以它有一些限制,但这可能会有用。


1
+1你的实现比@maciejkow的更具类型安全性。我曾经用类似的方法编写了一些数组扩展方法。 - Alex Essilfie

1

我做到了!

public static class ArrayExtensions
{
    public static IEnumerable<T> ToEnumerable<T>(this Array target)
    {
        foreach (var item in target)
            yield return (T)item;
    }
}

方法中的“this Array target”是什么意思?我认为Array是一个抽象类,那么在写“this Array target”的时候你具体在做什么? - VatsalSura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接