你理论上可以通过 Reflection 和 GetField like 来做到这一点
void PrintValueOfString(string player)
{
var fieldInfo = this.GetType().GetField(player, BindingFlags.NonPublic | BindingFlags.Instance);
if(fieldInfo != null)
{
Debug.Log(fieldInfo.GetValue(this));
}
}
.... 但不要 ^^
反射总是很昂贵,而且容易出错。
宁可使用enum 和Dictionary,例如
public enum Players
{
Ronaldo,
Messi
}
public Players _player;
private Dictionary<Players, int> _playerValues = new Dictionary<Playrers, int>
{
{Players.Ronaldo, 7},
{Players.Messi, 10}
};
void PrintValueOfCurrentPlayer()
{
PrintValueOfPlayer(_player);
}
void PrintValueOfPlayer(Player player)
{
if(_playerValues.TryGetValue(player, out var value))
{
Debug.Log($"Player {player} has value {value}");
}
else
{
Debug.LogError($"There is no value for player {player}!");
}
}
或者只是一个带字符串的
private Dictionary<string, int> _playerValues = new Dictionary<string, int>
{
{"Ronaldo", 7},
{"Messi", 10}
};
void PrintValueOfString(string player)
{
if(_playerValues.TryGetValue(player, out var value))
{
Debug.Log($"Player {player} has value {value}");
}
else
{
Debug.LogError($"There is no value for player {player}!");
}
}