Состояние регистрации объекта. Получение всех его значений свойств как строки

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()?

Решение, которое я выполнил: -

/// <summary>
/// Creates a string of all property value pair in the provided object instance
/// </summary>
/// 
/// 
/// 
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 ответа

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();
}


static void Log(object @object)
{
 foreach (var property in @object.GetType().GetProperties())
 Console.WriteLine(property.Name + ": " + property.GetValue(@object, null).ToString());
}


Вы можете получить доступ к названию свойства, используя отражение как показано ниже

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

licensed under cc by-sa 3.0 with attribution.