J'ai une structure, qui a les mêmes attributs de type: ils ont tous été attribués à une valeur unique. Tout ce que j'ai besoin de faire est de prendre une valeur aléatoire de cette structure. P> Par exemple: P> SomeTypes myTypes;
private string GetRandomType(){
//Instead of:
return myTypes.type1; //Or type2 etc.
//This is what I want:
return myTypes.takeOneRandom();
}
4 Réponses :
Le moyen le plus simple est de reformater votre code et d'avoir un tableau au lieu de différents champs: Si vous voulez garder vos champs, il y a un Couple de choses que vous pouvez faire. Vous pouvez fournir un indexer avec un commutateur, un dictionnaire ou, comme indiqué dans d'autres réponses que vous pouvez utiliser la réflexion. P> Voici une solution avec un indexeur et un commutateur: P> SomeTypes myTypes = new SomeTypes("t0", "t1", "t2", "t3");
Console.WriteLine(myTypes.takeOneRandom());
Merci pour une réponse longue encore très claire. Mais j'ai une solution plus courte, mon cas plus de solution d'ajustement, qui est très similaire à celle du bas.
Je pense que le fait que c'est une structure n'est pas un problème pour vous, étant donné que vous ne voulez que lire l'un des champs (que BTW. Devrait plutôt être des propriétés). Vous pouvez utiliser la réflexion. Votre instance de struct sera automatiquement en boîte, mais ce n'est pas un problème tant que vous venez de lire.
Voici le code: P>
struct SomeStruct
{
private static PropertyInfo[] properties = typeof(SomeStruct).GetProperties();
private static Random random = new Random();
public string type1 { get; set; }
public string type2 { get; set; }
public string type3 { get; set; }
public string type4 { get; set; }
public string TakeOneRandom()
{
int index = random.Next(properties.Length);
return properties[index].GetValue(this)?.ToString();
}
}
Cela fonctionne aussi bien, merci. Mais dans mon cas, getters et setters rend cette structure inutile, car je ne peux plus affecter les valeurs dans l'éditeur.
@Marius: Vous pouvez faire la même chose avec les champs.
J'ai un nombre fixe de "types", plus précisément, Sprites assignés dans l'éditeur fort>. p>
Je voudrais simplement initialiser un tableau avec les champs donnés et utiliser cela pour obtenir une entrée aléatoire à l'aide de
aléatoire.range code>p>xxx pré> puis utilisez-le comme p>
xxx pré> BlockQuote>
Cela devrait faire le truc avec la réflexion: Ceci a été testé à l'aide de LINQPAD P> P>
Avec struct sa compliquée. Mais vous pouvez utiliser la liste des chaînes ou du type dynamique. Pourquoi la structure?
Parce que j'ai un nombre fixe de "types", plus précisément, des sprites attribués dans l'éditeur. La raison pour laquelle je l'ai fait avec la structure, car il est plus lisible dans la rédaction de la rédaction que le tableau ou la liste, qui apparaît comme "élément 0", "élément 1" et, bien sûr, plus facile à accéder au code. Mais j'ai peur, j'ai déjà compliqué cela
Ainsi, utilisez un type de dictionnaire, la clé est votre nom et votre valeur est votre type.