10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C#でvar_dump

Posted at

C#超初心者
これをどんなプロジェクトでも使えるようにするには、どうしたらいいのか?

転載元:http://ruuddottech.blogspot.jp/2009/07/php-vardump-method-for-c.html

var_dump.cpp

using System;
using System.Text;
using System.Reflection;
using System.Collections;
  
public string var_dump(object obj, int recursion)
{
    StringBuilder result = new StringBuilder();
  
    // Protect the method against endless recursion
    if (recursion < 5)
    {
        // Determine object type
        Type t = obj.GetType();
  
        // Get array with properties for this object
        PropertyInfo[] properties = t.GetProperties();
  
        foreach (PropertyInfo property in properties)
        {
            try
            {
                // Get the property value
                object value = property.GetValue(obj, null);
  
                // Create indenting string to put in front of properties of a deeper level
                // We'll need this when we display the property name and value
                string indent = String.Empty;
                string spaces = "|   ";
                string trail = "|...";
                  
                if (recursion > 0)
                {
                    indent = new StringBuilder(trail).Insert(0, spaces, recursion - 1).ToString();
                }
  
                if (value != null)
                {
                    // If the value is a string, add quotation marks
                    string displayValue = value.ToString();
                    if (value is string) displayValue = String.Concat('"', displayValue, '"');
  
                    // Add property name and value to return string
                    result.AppendFormat("{0}{1} = {2}\n", indent, property.Name, displayValue);
  
                    try
                    {
                        if (!(value is ICollection))
                        {
                            // Call var_dump() again to list child properties
                            // This throws an exception if the current property value
                            // is of an unsupported type (eg. it has not properties)
                            result.Append(var_dump(value, recursion + 1));
                        }
                        else
                        {
                            // 2009-07-29: added support for collections
                            // The value is a collection (eg. it's an arraylist or generic list)
                            // so loop through its elements and dump their properties
                            int elementCount = 0;
                            foreach (object element in ((ICollection)value))
                            {
                                string elementName = String.Format("{0}[{1}]", property.Name, elementCount);
                                indent = new StringBuilder(trail).Insert(0, spaces, recursion).ToString();
  
                                // Display the collection element name and type
                                result.AppendFormat("{0}{1} = {2}\n", indent, elementName, element.ToString());
  
                                // Display the child properties
                                result.Append(var_dump(element, recursion + 2));
                                elementCount++;
                            }
  
                            result.Append(var_dump(value, recursion + 1));
                        }
                    }
                    catch { }
                }
                else
                {
                    // Add empty (null) property to return string
                    result.AppendFormat("{0}{1} = {2}\n", indent, property.Name, "null");
                }
            }
            catch
            {
                // Some properties will throw an exception on property.GetValue()
                // I don't know exactly why this happens, so for now i will ignore them...
            }
        }
    }
  
    return result.ToString();
}

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?