当前位置:  开发笔记 > 编程语言 > 正文

C#中是否不支持静态索引器?

如何解决《C#中是否不支持静态索引器?》经验,为你挑选了2个好方法。

我一直在尝试这几种不同的方式,但我得出的结论是它无法完成.这是我过去从其他语言中享受的语言功能.这只是我应该注销的东西吗?



1> Jon Skeet..:

不,C#不支持静态索引器.然而,与其他答案不同,我看到如何轻松地指出它们.考虑:

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

我怀疑这种情况相对较少使用,但我认为它被禁止是奇怪的 - 就我所见,它给出了不对称的特殊原因.


我们什么时候作为一个社区意识到无法预测人们如何使用某种工具.我喜欢C#中的这个功能.
废话.现在我要写一个静态方法Cache.Get(key)而不是Cache [key] ...
究竟.他们有自己的位置.在这里谈论设计问题的其他人显然从未使用过允许的经典语言,因为它们非常有用.

2> George Chakh..:

您可以使用静态索引属性模拟静态索引器:

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


尽管Jon的回答(像往常一样)是最正确的,但对于某些情况来说这并不是一个糟糕的选择.
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有