27 votes

Les indexeurs statiques ne sont-ils pas pris en charge en C #?

J'ai essayé cela de différentes manières, mais j'arrive à la conclusion que cela ne peut pas être fait. C'est une fonctionnalité de langue que j'ai appréciée dans d'autres langues dans le passé. Est-ce juste quelque chose que je devrais simplement radier?

50voto

Jon Skeet Points 692016

Non, les indexeurs statiques ne sont pas pris en charge en C #. Contrairement à d'autres réponses, cependant, je vois comment il pourrait facilement être utile de les avoir. Considérer:

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

Il serait relativement rarement utilisé, je suppose, mais je pense que c'est étrange qu'il soit interdit - il donne l'asymétrie sans raison particulière pour autant que je puisse voir.

9voto

George Chakhidze Points 1386

Vous pouvez simuler des indexeurs statiques à l'aide de propriétés indexées statiques:

 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()); }
    }
}
 

Usage:

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

-9voto

Nikki9696 Points 3084

Si je comprends la question, les indexeurs statiques SONT pris en charge pour C # en général; c'est juste que toutes les classes ne les mettent pas en œuvre.

Voir cet article à titre d'exemple, avec un exemple de code pour les implémenter. http://www.csharphelp.com/archives/archive140.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X