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

记录对象的状态。将其所有属性值作为字符串获取

  •  6
  • IsmailS  · 技术社区  · 14 年前
    public class Address
    {
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Zip { get; set; }
    }
    ......
    var emp1Address = new Address();
    emp1Address.AddressLine1 = "Microsoft Corporation";
    emp1Address.AddressLine2 = "One Microsoft Way";
    emp1Address.City = "Redmond";
    emp1Address.State = "WA";
    emp1Address.Zip = "98052-6399";
    

    string toLog = Helper.GetLogFor(emp1Address);
    

    sting toLog应该像下面这样。

    AddressLine1 = "Microsoft Corporation";
    AddressLine2 = "One Microsoft Way";
    City = "Redmond";
    State = "WA";
    Zip = "98052-6399";
    

    然后我会记录 toLog 字符串。

    Helper.GetLogFor()

    我的解决方案plemented:-

    /// <summary>
    /// Creates a string of all property value pair in the provided object instance
    /// </summary>
    /// <param name="objectToGetStateOf"></param>
    /// <exception cref="ArgumentException"></exception>
    /// <returns></returns>
    public static string GetLogFor(object objectToGetStateOf)
    {
      if (objectToGetStateOf == null)
      {
        const string PARAMETER_NAME = "objectToGetStateOf";
        throw new ArgumentException(string.Format("Parameter {0} cannot be null", PARAMETER_NAME), PARAMETER_NAME);
      }
      var builder = new StringBuilder();
    
      foreach (var property in objectToGetStateOf.GetType().GetProperties())
      {
        object value = property.GetValue(objectToGetStateOf, null);
    
            builder.Append(property.Name)
            .Append(" = ")
            .Append((value ?? "null"))
            .AppendLine();
      }
      return builder.ToString();
    }
    
    3 回复  |  直到 14 年前
        1
  •  23
  •   Bryan Watts    14 年前
    public static string GetLogFor(object target)
    {
        var properties =
            from property in target.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)
            select new
            {
                Name = property.Name,
                Value = property.GetValue(target, null)
            };
    
        var builder = new StringBuilder();
    
        foreach(var property in properties)
        {
            builder
                .Append(property.Name)
                .Append(" = ")
                .Append(property.Value)
                .AppendLine();
        }
    
        return builder.ToString();
    }
    
        2
  •  5
  •   Muhammad Hasan Khan    14 年前
    static void Log(object @object)
    {
        foreach (var property in @object.GetType().GetProperties())
            Console.WriteLine(property.Name + ": " + property.GetValue(@object, null).ToString());
    }
    
        3
  •  1
  •   PSK    14 年前

    可以使用反射访问属性名

    Type t = emp1Address.GetType();
    
    
    PropertyInfo [] pi = t.GetProperties();
       foreach (PropertyInfo p in pi)
       {
    
         //You can get the value (using GetValue() method) and name (p.Name) here.
    
    
    
       }