1

C# でインデクサーを作成することは可能ですが、次のようなものです。

public class MyClass
{
   Dictionary<int, string> myCollection = new Dictionary<int, string>();

   public string Value[int i]
   {
      get { return myCollection[i]; }
      set { myCollection[i] = value; }
   }
}

ありがとう

4

3 に答える 3

1

いいえ、C#許可しません。

仕様セクション 1.6.7.3 は次のように述べています。

インデクサーは、配列と同じ方法でオブジェクトにインデックスを付けられるようにするメンバーです。インデクサーはプロパティのように宣言されますが、メンバーの名前が this であり、その後に区切り記号 [ と ] の間にパラメーター リストが記述される点が異なります。

これには次のような簡単な方法を使用することをお勧めします。

public string GetValue(int key)
{
    if (dictionary.ContainsKey(key))
       .....
}

あなたの場合、辞書項目をkeyではなく参照しますindexが、これはかなり異なるものです。

PS:ディクショナリはアイテムの順序を保持しないことに注意してください。これは、場合によっては重要になる可能性があります。

于 2011-09-28T10:43:13.213 に答える
1

いいえ、

実際、あなたのプロパティにValueはすでに文字列からのインデクサーがあり、char を返します。おそらく、次のようなものが必要です。

public class MyClass
{
   Dictionary<int, string> myCollection = new Dictionary<int, string>();

   public Dictionary<int, string> Value
   {
      get { return myCollection; }
      set { myCollection = value; }
   }
}

そして、それはあなたが期待した動作になります。

string value = myClassInstance.Value[0];
于 2011-09-28T10:43:32.967 に答える
0

そのようにすることはできません (C# ではサポートされていません)。

代わりにどうですか

public class MyClass
{
   public MyClass()
    {
          Values = new Dictionary<int, string>()
     }
      public Dictionary<int, string> Values { get; set }   
}

これにより、次のことが可能になります

MyClass foo = new MyClass();
var someVal = foo.Values[3];
于 2011-09-28T10:46:34.340 に答える