从另一个类获取原始变量名称

时间:2018-02-15 03:53:42

标签: c# debugging

我想制作一个打印变量的简单调试工具,可以在我的项目中的任何地方使用:

public static DebugUtils {
  public static Log(object obj) {
    Debug.Log(GetOriginalVariableName(obj) + "=" + obj);
  }
  private static GetOriginalVariableName(object) {
    ...
  }
}

所以在课堂上我可以做到:

public class MyClass {
  public void Foo {
    string mySpecialString = "abc";
    DebugUtils.Log(mySpecialString);
  }
}

这将打印(我想要的)

mySpecialString=abc

我可以找到类似的答案here,但它必须在同一个班级,否则会打印出(我想要的东西)

obj=abc

它取代了 DebugUtils.Log 的变量名称......任何想法或内置c#函数,所以我可以实现这个目标吗?

P.S。我在Unity 5中使用C#5

1 个答案:

答案 0 :(得分:0)

您可以询问obj的类型。你可以问一个类型的字段。

public class MyClass
{
    public string MyProperty { get; set; }
    public string MyField;
}

public static void PrintFields(object o)
{
    foreach (var item in o.GetType().GetFields())
    {
        Console.WriteLine("Field '{0}': {1}", item.Name, item.GetValue(o));
    }
    foreach (var item in o.GetType().GetProperties())
    {
        Console.WriteLine("Property '{0}': {1}", item.Name, item.GetValue(o));
    }
}

static void Main()
{
    MyClass obj = new MyClass()
    {
        MyProperty = "propertyValue"
    };
    obj.MyField = "FieldValue";

    object o = obj; // Box in object-class

    PrintFields(o);
}