静的インデクサーはC#でサポートされていませんか? [複製]

StackOverflow https://stackoverflow.com/questions/154489

  •  03-07-2019
  •  | 
  •  

質問

    

この質問にはすでに回答があります:

    
            
  •             静的インデクサー?                                      7つの答え                          
  •     
    

私はこれをいくつかの異なる方法で試してきましたが、それができないという結論に達しました。これは私が過去に他の言語で楽しんでいた言語機能です。それは私がちょうど書き留めるべきものですか?

役に立ちましたか?

解決

いいえ、静的インデクサーはC#ではサポートされていません。しかし、他の答えとは異なり、私はそれらを持っていることで簡単にポイントがあり得る方法を見ます。考慮:

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

それは比較的まれにしか使用されないでしょうが、禁止されているのは奇妙だと思います-見る限り、特別な理由もなく非対称性を与えます。

他のヒント

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

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")   

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

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top