36

色々と試してみましたが、出来ないという結論に至りました。これは、私が過去に他の言語から楽しんできた言語機能です。それは私がただ書き留めるべきものですか?

4

3 に答える 3

60

いいえ、静的インデクサーはC#ではサポートされていません。しかし、他の答えとは異なり、私はそれらを持っていることにどのように簡単に意味があるのか​​を理解しています。検討:

Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")

比較的めったに使われないのではないかと思いますが、禁止されているのはおかしいと思います。私が見る限り、特別な理由もなく非対称になっています。

于 2008-09-30T19:18:52.563 に答える
16

静的インデックス付きプロパティを使用して、静的インデクサーをシミュレートできます。

public class MyEncoding
{
    public sealed class EncodingIndexer
    {
        public Encoding this[string name]
        {
            get { return Encoding.GetEncoding(name); }
        }

        public Encoding this[int codepage]
        {
            get { return Encoding.GetEncoding(codepage); }
        }
    }

    private static EncodingIndexer StaticIndexer;

    public static EncodingIndexer Items
    {
        get { return StaticIndexer ?? (StaticIndexer = new EncodingIndexer()); }
    }
}

使用法:

Encoding x = MyEncoding.Items[28591]; // Equivalent to Encoding.GetEncoding(28591)   
Encoding y = MyEncoding.Items["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")   
于 2010-08-18T09:04:38.753 に答える
0

いいえ、しかし、インデクサーを使用するクラスのインスタンスを保持する静的フィールドを作成することは可能です...

namespace MyExample {

   public class Memory {
      public static readonly MemoryRegister Register = new MemoryRegister();

      public class MemoryRegister {
         private int[] _values = new int[100];

         public int this[int index] {
            get { return _values[index]; }
            set { _values[index] = value; }
         }
      }
   }
}

...意図した方法でアクセスできます。これはイミディエイト ウィンドウでテストできます...

Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144
于 2016-02-14T21:57:36.343 に答える