| Propriété | Valeur |
|---|---|
| Catégorie | Usage (JustDummies.Usage) |
| Sévérité | 🟠 Avertissement |
| Activée par défaut | Oui |
Any.OneOf tire une valeur parmi un ensemble de valeurs. Alimenté avec des générateurs, il infère le type du constructeur comme type d’élément : l’ensemble contient des recettes, et y tirer produit une recette plutôt qu’une valeur — laquelle se propage ensuite vers les positions object et texte que signalent JD005 et JD011.
Ce qui en fait un piège plutôt qu’une bévue évidente, c’est l’incohérence de la surface. Any.OneOf(Any.Int32(), Any.Int64()) échoue à l’inférence de types et le compilateur vous arrête ; Any.OneOf(Any.Int32(), Any.Int32()) se lie proprement et ne dit rien.
Non conforme
IAny<AnyInt32> pool = Any.OneOf(Any.Int32().Positive(), Any.Int32().Negative()); // JD012
AnyInt32 drawn = pool.Generate(); // une recette, pas un nombre
Conforme
IAny<int> pool = Any.OneOf(Any.Int32().Positive().Generate(), Any.Int32().Negative().Generate());
int drawn = pool.Generate();
Notez ce que la forme conforme change : l’ensemble est construit avec empressement, un tirage par élément à la construction, et Generate() choisit ensuite parmi ces valeurs figées. C’est la sémantique documentée d’un ensemble de choix — si vous vouliez un tirage frais depuis un générateur choisi à chaque appel, c’est une autre intention et Any.OneOf n’est pas l’outil.
Ce qui n’est pas signalé
- Un ensemble de valeurs ordinaires, ou de valeurs générées.
- Un
OneOfporté par un autre type qu’Any/AnyContext. - Un ensemble dont les générateurs ont des types différents — le compilateur le refuse déjà.