色々と試してみましたが、出来ないという結論に至りました。これは、私が過去に他の言語から楽しんできた言語機能です。それは私がただ書き留めるべきものですか?
Kilhoffer
質問する
8522 次
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 に答える