Si j'ai une liste d'objets, par exemple List<Cake>
, est-il possible d'avoir un private int key
dans l'objet Cake qui stockera une valeur auto-incrémentée chaque fois que j'ajouterai à la liste.ID de conteneur C# à incrémentation automatique
La raison pour laquelle je veux cela est que je peux remplir une liste déroulante contenant tous les "Gâteaux" de ma liste avec une valeur unique pour chaque élément que je n'ai pas à saisir moi-même.
Par exemple:
public class Cake
{
private int _id;
private string _name;
public Cake(string name)
{
_name = name;
}
public int GetID()
{
return _id;
}
}
List<Cake> myCakeList = new List<Cake>();
myCakeList.Add(new Cake("Sponge"));
myCakeList.Add(new Cake("Chocolate"));
myCakeList.Add(new Cake("Battenburg"));
myCakeList.ForEach(x => {Console.WriteLine(x.GetID());});
Idéalement ce code renverrait:
0000001
0000002
0000003
ou (si je voulais un identifiant aléatoire)
389hguhg907903
357fboib4969gj
fhgw90290682gg
Pourriez-vous s'il vous plaît aviser si cela est dans la mesure du possible (pour les deux types de clés) et comment cela peut être fait. Aussi, que ce soit ou non une solution terrible à mon problème.
Un grand merci à l'avance,
Ashley
Merci pour votre réponse, mais je préférerais une clé qui est spécifique à chaque liste. – Ash
vous pourriez envisager d'utiliser un dictionnaire ou Dictionary au lieu d'une liste. Cependant, vous devrez fournir vous-même la clé de chaque élément Cake dans le dictionnaire, soit en utilisant une méthode comme ci-dessus, soit en utilisant un générateur de clé unique personnalisé. –
Slantroph
Si deux threads tentent d'allouer Cakes à peu près au même moment, ils peuvent se retrouver avec le même ID. Vous devez utiliser un objet statique comme verrou autour de l'opération '_id = Last ++; –