【问题标题】:Unity - C# How to print the value of variable that its name is stored in string variableUnity - C#如何打印其名称存储在字符串变量中的变量的值
【发布时间】:2021-10-21 22:47:57
【问题描述】:

统一 - C# 脚本; 我想打印其名称存储在字符串变量中的变量(int、float、string 或任何 var)的值: 例如:

int Ronaldo = 7;
int Messi = 10;
string Player = "Messi";

void PrintValueOfString(Player)
{
    // how to print the value of int Messi ??
}

当我想这样做时,就像在 PHP 中一样:

$Messi = 10;
$Test = "$Messi";
echo $Test ;

【问题讨论】:

  • Debug.Log(Player);?

标签: c# string unity3d variables


【解决方案1】:

理论上可以通过 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));
    }
}

.... 但不要 ^^

反射总是很昂贵,而且容易出错。


宁可使用enumDictionary,例如

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}!");
    }
}

【讨论】:

    【解决方案2】:

    您可以这样做或使用简单的“print()”而不是“Debug.Log()”。

    int Ronaldo = 7;
    int Messi = 10;
    string Player = "Messi";
    
    void PrintValueOfString(Player)
    {
        // how to print the value of int Messi ??
        Debug.Log($"Messi: {Messi} | Player: {Player} | Ronaldo: {Ronaldo}")
    }
    

    这将打印以下内容:

    Messi: 10 | Player: Messi | Ronaldo: 7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多