2011-05-24 23 views
3

配列の特定の要素を返す2D配列のプロパティを記述することはできますか?私は配列が静的クラスに属しているため、インデクサーを探していないと確信しています。2D配列プロパティ

+2

を?:あなたを取得できません多分ちょうど読み取り専用1、例えば - ラッパー型は、インデクサーを持つことができます質問、私たちはプロパティを介して配列を返すことができないと思った –

答えて

6

パラメータを持つプロパティが必要なように思えます。これは基本的にはインデクサです。ただし、C#で静的インデクサを記述することはできません。

もちろん、になります。配列を返すプロパティを書くだけですが、カプセル化の理由からそうしたくないと思います。

もう1つの方法は、GetFoo(int x, int y)SetFoo(int x, int y, int value)の方法を記述することです。

さらに別の方法として、配列の周りにラッパータイプを記述し、という属性をに設定することもできます。その後

public class Wrapper<T> 
{ 
    private readonly T[,] array; 

    public Wrapper(T[,] array) 
    { 
     this.array = array; 
    } 

    public T this[int x, int y] 
    { 
     return array[x, y]; 
    } 

    public int Rows { get { return array.GetUpperBound(0); } } 
    public int Columns { get { return array.GetUpperBound(1); } } 
} 

public static class Foo 
{ 
    private static readonly int[,] data = ...; 

    // Could also cache the Wrapper and return the same one each time. 
    public static Wrapper<int> Data 
    { 
     get { return new Wrapper<int>(data); } 
    } 
} 
+0

私は思った? http://msdn.microsoft.com/en-us/library/0fss9skc%28v=VS.100%29.aspxそれを無視して、あなたは私の質問に答えました。 – Andrew

+0

@Andrew:*同じことではありません。配列への参照を返すことはできますが、その配列の使い方を制御することはできません。 –

+0

プロパティの実装で 'return array [x、y];'を返すべきであると仮定します。 'return this [x、y];'(これは無限再帰を与えます)。 – Douglas

1

これはどういう意味ですか?

array[x][y] 

ここで、xは行、yは列です。

0

たぶん、このようなものは

public string this[int x, int y] 
{ 
    get { return TextArray[x, y]; } 
    set { TextArray[x, y] = value; } 
} 
+0

問題は静的なクラスであるため、静的なメンバーでなければならないということです。 C#で静的インデクサを作成することはできません。 –