2010-11-03 15 views
6

En ce moment, sans utiliser les propriétés, j'ai ceci:Ajout d'attributs à C# jeu de paramètres propriété

public void SetNumber([Array(new int[]{8})] Byte[] number) 

Comme vous pouvez le voir, je suis d'ajouter l'attribut ArrayAttribute au paramètre.

Ce que je veux faire est le même mais sur un setter de propriété. Cela ne fonctionne pas:

[Array(new int[]{8})] 
public Byte[] SetNumber 
{ 
    set 
    { 
    } 
    get 
    { 
    return null; 
    } 
} 

Est-il possible d'attacher l'attribut au paramètre de la méthode set_SetNumbervalue?

Aussi, une question connexe. Les deux méthodes générées (get/set) n'ont pas l'attribut personnalisé. Quelqu'un peut-il m'expliquer pourquoi?

Répondre

7

Vous devez utiliser le paramattribute target sur le set:

public Byte[] SetNumber { 
    [param: Array(new int[] { 8 })] 
    set { 
    } 
    get { 
    return null; 
    } 
} 

Quant à la deuxième question, l'attribut personnalisé est défini sur la propriété elle-même, pas sur les méthodes d'accesseur de propriété.

Aussi, si votre ArrayAttribute ne jamais applique aux paramètres, il pourrait être défini comme ceci:

[AttributeUsage(AttributeTargets.Parameter)] 
public class ArrayAttribute : Attribute { 
    // ... 
} 
+2

+1 n'a jamais su cela. – SLaks

+0

Merci, cela a résolu mon problème. – tlg

0

Vous ne faites pas cela, créez une méthode comme vous l'avez fait dans le premier exemple. Vous ne pouvez pas passer autre chose que la valeur à l'ensemble.

public Byte[] TheNumber 
{ 
    private set; 
    get 
    { 
     return null; 
    } 
} 

public void SetNumber([Array(new int[] { 8 })] Byte[] number) 
{ 
    this.TheNumber = number; 
} 
+0

BTW, si vous avez une propriété exposée comme ci-dessus, vous pouvez utiliser ensemble privé; – CrazyDart

+0

consultez ce lien http://oreilly.com/catalog/progcsharp/chapter/ch18.html – CrazyDart

+0

En fait, cela pourrait fonctionner. Juste un peu de note d'arrière-plan, je génère ces méthodes à partir d'un fichier XML. L'attribut est pour le test unitaire de générer un tableau de longueur appropriée en tant que paramètre. – tlg

0

Je ne suis pas certain, mais je pense que vous ne pouvez pas faire ce que vous voulez - le paramètre setter value n'est pas exposé pour vous d'appliquer un attribut.

Et pour votre deuxième question, une propriété est distincte de ses méthodes getter & getter. Vous pouvez appliquer un attribut à la méthode setter comme ceci:

public Byte[] SetNumber 
{ 
    [Array(new int[]{8})] 
    set 
    { 
    } 
    get 
    { 
    return null; 
    } 
} 
+0

J'ai essayé cela, mais je reçois toujours la valeur null lorsque j'essaie d'appeler GetCustomAttribute (true) sur la version de la méthode set de la propriété (dans la fenêtre Debug Immediate). Quoi qu'il en soit, je pense que je vais abandonner l'idée pour le moment. Merci. – tlg