2009-07-25 58 views
9

我习惯将方法添加到像IEnumerable这样的外部类。但是我们可以用C#扩展数组吗?是否可以在C#中扩展数组?

我打算给数组添加一个方法,将它转换为IEnumerable即使它是多维的。

我这是不是涉及到How to extend arrays in C#

+3

试穿比在这里发布问题还短吗? – 2009-07-25 21:19:30

+3

我试过了,但是在那个过程中我犯了一些错误。现在我得到了我期望的行为 – 2009-07-25 21:24:51

回答

23
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()); 
    } 
} 
+0

“this Array array”在方法中意味着什么。我认为Array是一个抽象类,那么通过编写“this Array array”,你到底在做什么? – VatsalSura 2017-02-07 17:11:17

+2

这个数组数组意味着*这个数组*指的是要扩展的类型。 *这个数组* *可能就是*这个T *,其中方法将是 * public static void Extend (this T obj)*。标识符只是给这个类型一个名字,所以它可以在扩展方法中被引用。 – SimonC 2017-04-13 08:40:23

2

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

是的。无论是通过扩展作为已经显示的Array类,或通过延长特定类型的数组,甚至一个普通的数组:

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

// or: 

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

最后一个是不完全等同于延长Array,因为这不是一个工作多维数组,所以它更受约束,这可能是有用的,我想。

相关问题