Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 记录实例数据_C#_C# 4.0 - Fatal编程技术网

C# 记录实例数据

C# 记录实例数据,c#,c#-4.0,C#,C# 4.0,我在想除了ActionExecutingContextinstance之外,我应该包括哪些字段,我想如果有一个助手,可以生成实例数据的可读文本表示,这不是很好吗 我知道,我并不是在所有情况下都是完美的——我的意思是它可能太深了,它可能无法输出默认情况下需要的所有信息,但在许多情况下,它比只输出没有任何数据的异常消息要好 有没有人在开源项目中写过这样的东西?您可以使用反射轻松获得对象所有属性的值: public static void LogPublicProperties(object obj)

我在想除了
ActionExecutingContext
instance之外,我应该包括哪些字段,我想如果有一个助手,可以生成实例数据的可读文本表示,这不是很好吗

我知道,我并不是在所有情况下都是完美的——我的意思是它可能太深了,它可能无法输出默认情况下需要的所有信息,但在许多情况下,它比只输出没有任何数据的异常消息要好


有没有人在开源项目中写过这样的东西?

您可以使用反射轻松获得对象所有属性的值:

public static void LogPublicProperties(object obj)
{
    foreach (var propertyInfo in d.GetType().GetProperties())
        Console.WriteLine("{0} = {1}",
            propertyInfo.Name,
            propertyInfo.GetValue(d, null));
}

如果要记录字段,请使用
Type.GetFields()
而不是
GetProperties()

它将仅从一级属性获取值,例如在ActionExecutingContext中,用户代理非常深入:filterContext.RequestContext.HttpContext.Request.UserAgents以递归方式执行此操作,这只是一个如何检测复杂属性的问题。@Baboon:我想问题是,您不希望递归到每个属性中,因为这会在日志中产生大量(不需要的)信息。因此,请创建一个属性来放置不应再显示的类型,并且不会递归到该类型的属性上。没有说“递归直到它不再有意义”的内置功能不能将属性放在属于.net framework的类型上。您必须创建一些外部config-/rules文件。