2009-07-25 6 views
9

Tôi được sử dụng để thêm các phương thức vào các lớp bên ngoài như IEnumerable. Nhưng chúng ta có thể mở rộng mảng trong C#?Có thể mở rộng mảng trong C# không?

Tôi định thêm phương thức vào các mảng chuyển đổi nó thành một IEnumerable ngay cả khi nó là đa chiều.

Không liên quan đến How to extend arrays in C#

+3

Không phải là ngắn hơn để thử hơn là đăng câu hỏi ở đây? –

+3

Tôi đã thử, nhưng tôi đã làm một cái gì đó sai trái trong quá trình trở lại sau đó. Bây giờ tôi nhận được hành vi mà tôi mong đợi –

Trả lời

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

"Mảng mảng này" có nghĩa là gì trong phương pháp. Tôi nghĩ rằng Array là một lớp trừu tượng vì vậy bạn đang làm gì chính xác ở đây bằng cách viết "mảng mảng này"? – VatsalSura

+2

mảng Mảng này có nghĩa là * Mảng này * đề cập đến loại được mở rộng. * Mảng * này cũng có thể là * T * này, trong đó phương pháp sẽ là * khoảng trống công cộng Mở rộng (T obj này) *. Mã định danh chỉ cung cấp tên kiểu, vì vậy nó có thể được tham chiếu trong phương thức mở rộng. – SimonC

2

tôi đã làm nó!

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

"Mục tiêu của mảng này" có nghĩa là gì trong phương pháp. Tôi nghĩ rằng Array là một lớp trừu tượng, vậy bạn chính xác làm gì ở đây bằng cách viết "mục tiêu Mảng" này? – VatsalSura

23

Có. Hoặc thông qua việc mở rộng lớp Array như đã hiển thị, hoặc bằng cách mở rộng một loại cụ thể của mảng hoặc thậm chí là một mảng chung:

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

// or: 

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

Người cuối cùng là không chính xác tương đương có thể mở rộng Array, vì nó sẽ không làm việc cho một mảng đa chiều, do đó, nó có nhiều hạn chế hơn, điều này có thể hữu ích, tôi cho là vậy.

+1

+1 Việc triển khai của bạn an toàn hơn so với @ maciejkow's. Tôi đã viết một số phương pháp mở rộng mảng bằng cách sử dụng một phương pháp tương tự một số thời gian trước đây. –