2011-09-28 8 views
1

Il est à craete indexeur es posible en C#, mais quelque chose comme ceci:indexeur en C#, mais sans que cela

public class MyClass 
{ 
    Dictionary<int, string> myCollection = new Dictionary<int, string>(); 

    public string Value[int i] 
    { 
     get { return myCollection[i]; } 
     set { myCollection[i] = value; } 
    } 
} 

Merci

+0

Avez vous avez essayé d'exécuter le code vous-même? Qu'est ce que ça fait? est-ce que ça marche? – ColinE

Répondre

1

Non, C# ne permet pas.

section 1.6.7.3 de spécification de parole:

Un indexeur est un élément qui permet à des objets d'être indexées dans le même comme un tableau. Un indexeur est déclaré comme une propriété sauf que le nom du membre est celui-ci suivi d'une liste de paramètres écrite entre les délimiteurs [et].

Je vous suggère d'utiliser la méthode simple pour cela comme:

public string GetValue(int key) 
{ 
    if (dictionary.ContainsKey(key)) 
     ..... 
} 

Dans votre cas, vous reffer articles par dictionnaire key pas index, c'est assez choses defferent. Gardez à l'esprit que le dictionnaire ne conserve pas l'ordre des éléments et cela pourrait être vital dans certains cas!

1

Non,

En fait, votre propriété Value ont déjà indexeur de chaîne et renvoie ombles. Probablement vous avez besoin de quelque chose comme ceci:

public class MyClass 
{ 
    Dictionary<int, string> myCollection = new Dictionary<int, string>(); 

    public Dictionary<int, string> Value 
    { 
     get { return myCollection; } 
     set { myCollection = value; } 
    } 
} 

Et ce sera le comportement que vous attendiez.

string value = myClassInstance.Value[0]; 
+1

+1, mais probablement mieux d'exposer une interface IDictionary, et de laisser tomber le setter :) – MattDavey

+0

Oui mais je ne veux pas retourner tout le dictionnaire, car cela sera également autorisé: myClassInstance.Value.Add (...), et ce dictionnaire peut inclure seulement 3 valeurs, et l'autre utilisateur ne peut pas ajouter d'autres valeurs – Robert

+0

Ainsi, en tant qu'option vous pouvez: 1) créer le type avec le dictionnaire indexé et incapsulate dedans (si vous voulez vraiment l'index); 2) Changer la propriété en methor 'GetValue (int key)'; – Samich

0

Vous ne pouvez pas le faire de cette façon, (non pris en charge par C#)

Que diriez-vous à la place

public class MyClass 
{ 
    public MyClass() 
    { 
      Values = new Dictionary<int, string>() 
    } 
     public Dictionary<int, string> Values { get; set } 
} 

ce qui vous permettra de faire

MyClass foo = new MyClass(); 
var someVal = foo.Values[3]; 
Questions connexes