Propriétés exposer les éléments d'un tableau en C#
Je veux créer une propriété en C# qui définit ou renvoie d'un individu membre d'un groupe. Actuellement, j'ai ceci:
private string[] myProperty;
public string MyProperty[int idx]
{
get
{
if (myProperty == null)
myProperty = new String[2];
return myProperty[idx];
}
set
{
myProperty[idx] = value;
}
}
Cependant, je reçois l'erreur de compilation suivante:
Mauvais tableau de demande de déclaration: Pour déclarer une matrice le rang spécificateur précède la variable d'identification de l'. Pour déclarer une zone tampon de taille fixe, utilisez le mot-clé fixe avant le type de champ.
OriginalL'auteur pm_2 | 2010-08-23
Vous devez vous connecter pour publier un commentaire.
Comment à ce sujet: écrire une classe qui ne fait qu'une chose et une seule chose: fournir un accès aléatoire aux éléments du sous-jacent indexé de la collection. Donner ce classe un
this
de l'indexeur.Pour les propriétés que vous souhaitez fournir un accès aléatoire, il suffit de retourner une instance de cette indexeur de classe.
Implémentation triviale:
Refactoring dans votre code:
Cela vous permettra d'avoir autant de indexés propriétés que vous le souhaitez, sans avoir besoin d'exposer ces propriétés avec les
IList<T>
interface.OriginalL'auteur Dan Tao
Vous devez utiliser
this
comme le nom de la propriété pour les indexeurs.Vous aurez à faire MyProperty retour une sorte de indexables liste. Si vous avez besoin d'un contrôle serré, vous pouvez mettre en œuvre vous-même.
OriginalL'auteur leppie
C# ne permet qu'une propriété indexée par classe, de sorte que vous êtes obligé d'utiliser cette.
Les choses ont changé. D'abord une telle limitation n'existe pas. Auriez-vous l'esprit d'affichage des nouvelles de la syntaxe et de nous dire quand il a été ajouté à la langue?
peut-être que nous parlons à la croix: vous pouvez déclarer
public int this[string index]
le long du côtépublic int this[int index]
et ils peuvent faire deux choses complètement différentes. Je dirais que c'est plus d'une propriété indexée.L'a obtenu. À partir du concepteur de classes de point de vue vous avez encore une propriété qu'il possède un nom. Imaginez StringList classe, qui dans d'autres langues pourraient avoir des propriétés Cordes[int], les Objets[chaîne], Nom[int], Valeurs[string name] etc. En C# vous ne pouvez pas les mettre en œuvre et même si vous le pouvez, il n'est pas évident et presque inutilisable.
OriginalL'auteur joekoyote
Vous pouvez l'utiliser de cette façon:
Et il est possible d'accéder à l'myProp[1] comme MyProp[1] par Exemple
OriginalL'auteur Tokk
D'exposer votre tableau par le biais d'une propriété en lecture seule peut répondre à vos besoins. Puisque vous ne voulez pas permettre à d'autres de code afin d'attribuer le tableau en tant que tel, il n'est pas nécessaire pour un public setter:
Ensuite, vous pouvez écrire du code en tant que tel:
...mais vous ne pouvez pas remplacer le tableau lui-même:
OriginalL'auteur Fredrik Mörk
Une option est de les réécrire comme suit:
Il va compiler, mais il possède son propre ensemble de problèmes (fxCop va hurler, mais il peut vous conduire à d'autres options).
OriginalL'auteur Russ
Vous pourriez faire quelque chose comme ceci:
OriginalL'auteur fletcher
C# fournit pas de mécanisme intégré pour créer indexé propriétés. Vous pouvez utiliser un niveau de classe de l'indexeur (à l'aide de
this[int index]
notation), mais rien de ce genre sur un niveau de la propriété.Une option consiste à créer une classe d'assistance avec un indexeur et l'utilisation de cette classe, comme le type de propriété. Voir un exemple sur MSDN.
OriginalL'auteur VladV
Tout d'abord, dans le champ de la déclaration évite l'excès de vérifier:
Vous pouvez mettre en œuvre plusieurs indexeurs via la surcharge par type d'entrée:
OriginalL'auteur abatishchev
Vous devez utiliser un indexeur. Il fonctionne un peu différemment. Voir l'exemple:
Remarque: Vous n'êtes autorisé seulement un indexeur par classe. La raison en est qu'il est trop confus pour le compilateur, quant à la signification, de sorte que vous ne sont autorisés.
Vous pouvez également le faire:
...
OriginalL'auteur