我想制作一个打印变量的简单调试工具,可以在我的项目中的任何地方使用:
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
答案 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);
}