Это похоже на анти-паттерн. Сделайте вашу структуру неизменной (в любом случае вам может не понадобиться структура для этого, особенно если команде нужны другие функции):
public struct myCustomType
{
public string Name { get; }
public myCustomType(string name)
{
this.Name = name;
}
}
Создайте набор доступных команд, которые вы заполняете аналогично вашему addteams
методу:
public Dictionary<string, myCustomType> AvailableTeams; //color, team
public void InitializeTeams()
{
AvailableTeams = new Dictionary<string, myCustomType>()
{
["Yellow"] = new myCustomType("Yellow"),
["Red"] = new myCustomType("Red"),
["Blue"] = new myCustomType("Blue"),
["Green"] = new myCustomType("Green")
};
}
Когда игрок присоединяется к команде, удалите эту команду из доступного набора и добавьте ее в набор ActiveTeams:
public Dictionary<int, myCustomType> ActiveTeams; //player #, team
public void JoinTeam(int playerNumber, string teamColor)
{
if (!AvailableTeams.TryGetValue(teamColor, out myCustomType team)
// handle team already taken.
ActiveTeams.Add(playerNumber, team);
AvailableTeams.Remove(teamColor);
}