Est-il possible de créer un attribut qui peut être initialisé avec un nombre variable d'arguments ?
Par exemple :
[MyCustomAttribute(new int[3,4,5])] // this doesn't work
public MyClass ...
Est-il possible de créer un attribut qui peut être initialisé avec un nombre variable d'arguments ?
Par exemple :
[MyCustomAttribute(new int[3,4,5])] // this doesn't work
public MyClass ...
Vous pouvez le faire, mais ce n'est pas conforme au CLS :
[assembly: CLSCompliant(true)]
class Foo : Attribute
{
public Foo(string[] vals) { }
}
[Foo(new string[] {"abc","def"})]
static void Bar() {}
Spectacles :
Warning 1 Arrays as attribute arguments is not CLS-compliant
Pour l'utilisation régulière de la réflexion, il peut être préférable d'avoir plusieurs attributs, c'est à dire
[Foo("abc"), Foo("def")]
Cependant, cela ne fonctionnera pas avec TypeDescriptor
/ PropertyDescriptor
où seule une instance unique d'un attribut est prise en charge (soit la première ou la dernière victoire, je ne me souviens plus laquelle).
Ça devrait aller. Dans les spécifications, section 17.2 :
Une expression E est un expression d'arguments d'attributs si toutes les affirmations suivantes sont vraies :
Voici un exemple :
using System;
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class SampleAttribute : Attribute
{
public SampleAttribute(int[] foo)
{
}
}
[Sample(new int[]{1, 3, 5})]
class Test
{
}
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.