2009-07-25 8 views
9

私はIEnumerableのような外部クラスにメソッドを追加するために使用されています。しかし、C#で配列を拡張できますか?C#で配列を拡張することはできますか?

多次元であってもIEnumerableに変換する配列にメソッドを追加する予定です。私はそれをやったHow to extend arrays in C#

+3

ここに質問を投稿するよりも短くして試してみませんか? –

+3

私はしようとしましたが、その過程で間違ったことをしました。今私は期待した振る舞いを得ています –

答えて

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

「この配列配列」は何を意味しますか?私は、Arrayは抽象クラスだと思うので、ここで "この配列配列"を書いて正確に何をしていますか? – VatsalSura

+2

この配列配列は、*この配列*が拡張される型を参照していることを意味します。 *この配列*は、メソッドが * *のT *でもかまいません。public static void Extend (this T obj)*。識別子は単に型に名前を与えるだけなので、拡張メソッドで参照することができます。 – SimonC

2

に関連していない

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

メソッド内で「このArrayターゲット」とは何を意味しますか?私はArrayは抽象クラスだと思うので、 "this Array target"を書いてここで何をしているのですか? – VatsalSura

23

はい。それがために働かないよう

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

// or: 

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

最後の1は、Arrayを拡張するとまったく同じではありません。どちらかすでに示され、または配列、あるいは一般的な配列の特定の種類を拡張することによりとしてArrayクラスを拡張して多次元配列なので、少し拘束されていて便利です。

+1

+1あなたの実装は@ maciejkowよりも型安全です。私はいくつかの配列の拡張メソッドをいくつかの時間前に同様のメソッドを使用して記述しました。 –

関連する問題