如何识别异常日志中的通用对象

本文关键字:对象 日志 异常 何识别 识别 | 更新日期: 2023-09-27 17:56:28

我有一个接受泛型类型的参数的辅助方法。此方法可能会引发异常,我记录这些异常以便稍后调试。有些对象有 id,有些有名称等,在尝试调试时知道这些会很有用。如何以有用的方式记录此信息?

如何识别异常日志中的通用对象

注意是否

是泛型方法,除非您的对象为 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));

对于原语来说,这应该没有任何问题。对于对象,这取决于如何实现 ToString 方法。另请注意,它不会递归读取,只会读取类的直接成员。

此函数从类型返回 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;
}