2011-08-19 36 views
0

可能重複:
TypeDescriptor.GetProperties() vs Type.GetProperties()反射 - 輸出任何對象的最佳方法?

如果我想這需要一個隨機對象和輸出(或以其他方式獲取)的方法,每包含的屬性,這將是最優雅和強大的道路採取?

這個問題來自於我之前提出的問題here以及提出替代方法的評論。

  • 我以前做過的方式,使用TypeDescriptorPropertyDescriptor類:

    public static void extract(object obj) 
    { 
        List<string> properties = new List<string>(); 
        foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) 
        { 
         string name = descriptor.Name; 
         object value = descriptor.GetValue(obj); 
         properties.Add(name + " = " value); 
        } 
        if (properties.Count == 0) 
         output(obj.ToString()); 
        else 
         output(obj, string.Concat(properties)); 
    } 
    
  • 所提出的替代方案,使用Type.GetProperties():

    public static void extract(object obj) 
    { 
        List<string> properties = new List<string>(); 
        foreach (PropertyInfo property in obj.GetType().GetProperties()) 
        { 
         string name = property.Name; 
         object value = property.GetValue(obj, null); 
         properties.Add(name + " = " value); 
        } 
        if (properties.Count == 0) 
         output(obj.ToString()); 
        else 
         output(obj, string.Concat(properties)); 
    } 
    

到目前爲止,我還沒有和Reflection一起工作過,也沒有真正看到這兩者有什麼不同。從一個到另一個有什麼好處? 是否有另一種(更好)的方法來做到這一點?

+0

確實,感謝您的鏈接。 – magnattic

回答

2
public static class ObjectExtensions 
{ 
    public static string Extract<T>(this T theObject) 
    { 
     return string.Join(
      ",", 
      new List<string>(
       from prop in theObject.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public) 
       where prop.CanRead 
       select string.Format("{0} = {1}", 
       prop.Name, 
       prop.GetValue(theObject, null))).ToArray()); 
    } 
}