我有一个辅助方法,它接受泛型类型的参数。此方法可以抛出异常,我将其记录以便稍后进行调试。有些对象有id,有些有名称等,在尝试调试时很有用。如何以有用的方式记录此信息?
答案 0 :(得分:3)
如果它是通用方法,请注意,除非您的对象为null,否则可以使用myObject.GetType().ToString()
Loger.log("Object type that has thrown an error is" + myObj.GetType().ToString());
修改强>
如果您想从对象中读取更多信息,那么您可以读取如下对象属性:
Type type = myObj.GetType();
List<string> info = new List<String>();
info.Add("Object type that has thrown an error is: " + type.ToString() + Environment.NewLine);
foreach (var prop in type.GetProperties())
{
if (prop.CanRead)
{
info.Add("Name: " + prop.Name + " , Value: " + prop.GetValue(myObj) + Environment.NewLine);
}
}
Logger.log(string.Join("", info));
这应该对原语没有任何问题。对于Objects,它取决于ToString方法的实现方式。另请注意,它不会递归读取,只是该类的直接成员。
答案 1 :(得分:0)
此函数从类型中返回C#样式类型名称(类似List<String>
或List<Dictionary<Int32,String>>
)。
public static string FancyTypeName(Type type)
{
var typeName = type.Name.Split('`')[0];
if (type.IsGenericType)
{
typeName += string.Format("<{0}>", string.Join(",",
type.GetGenericArguments().Select(v => FancyTypeName(v)).ToArray())
);
}
return typeName;
}