代码之家  ›  专栏  ›  技术社区  ›  Macros

变量描述函数

  •  0
  • Macros  · 技术社区  · 16 年前

    C/.NET中是否有一个内置函数可以接受一个变量并描述/输出其内容?在PHP中有 print_r() var_dump() 实现这一点的函数(我认识到C和PHP之间固有的区别,只是提供一个输出示例)

    由于这是一个日志脚本,它需要尽可能的轻量和非侵入性-我正在考虑编写一个函数来实现这一点,但是如果可用的话,我更喜欢使用内置的。

    变量的示例包括自定义对象的数组/列表、从传递给事件处理程序的EventArgs中转储等。我希望尽可能地这样做,同时避免反射的开销。

    谢谢

    4 回复  |  直到 16 年前
        1
  •  1
  •   Community CDub    8 年前

    有关获取对象字符串表示形式的不同方法的摘要,请参阅我对该问题的回答:
    String casts

    既然你想让它既普通又轻便,你最好的选择可能是 Convert.ToString() .

        2
  •  1
  •   SirDemon    16 年前

    我不确定C中是否有任何内置的转储功能,但是您可以简单地使用反射和迭代一个变量的类型 方法信息、属性信息、字段信息 等。

    编辑 是的,我知道它不太轻。

        3
  •  0
  •   M4N    16 年前

    我不知道PHP,但我想类中重写/实现ToString()是最接近的匹配。

    例如,对于类人员,您可以实现与以下类似的toString():

    public override string ToString()
    {
      return string.Format("{0} {1}", this.FirstName, this.LastName);
    }
    

    这将为Person的任何实例输出“firstname lastname”。

        4
  •  0
  •   John Rasch    16 年前

    此方法没有内置方法,但下面是一个使用反射获取字段和属性的示例:

    public static string DisplayObjectInfo(Object o)
    {
       StringBuilder sb = new StringBuilder();
    
       // Include the type of the object
       System.Type type = o.GetType();
       sb.Append("Type: " + type.Name);
    
       // Include information for each Field
       sb.Append("\r\n\r\nFields:");
       System.Reflection.FieldInfo[] fi = type.GetFields();
       if (fi.Length > 0)
        {
          foreach (FieldInfo f in fi)
          {
             sb.Append("\r\n " + f.ToString() + " = " +
                       f.GetValue(o));
          }
       }
       else
          sb.Append("\r\n None");
    
       // Include information for each Property
       sb.Append("\r\n\r\nProperties:");
       System.Reflection.PropertyInfo[] pi = type.GetProperties();
       if (pi.Length > 0)
       {
          foreach (PropertyInfo p in pi)
          {
             sb.Append("\r\n " + p.ToString() + " = " +
                       p.GetValue(o, null));
          }
       }
       else
          sb.Append("\r\n None");
    
       return sb.ToString();
    }
    

    来源: http://www.developer.com/net/csharp/article.php/3713886