2009-07-25 32 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,因爲這不是一個工作多維數組,所以它更受約束,這可能是有用的,我想。