C#不支持静态索引器吗?

时间:2020-03-06 14:56:28  来源:igfitidea点击:

我已经尝试了几种不同的方法,但是我得出的结论是它无法完成。这是我过去从其他语言中获得的一种语言功能。这只是我应该注销的东西吗?

解决方案

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