2016-04-05 52 views
0

我使用反射來獲取所有屬性從類這樣可以跳過不必要的屬性:如何在C#中使用反射時

var props = item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); // todo: cache & filter not-needed props) 

var itemStr = string.Join(", ", 
        props.Select(p => p.GetValue(item, null)?.ToString()) 
          .ToArray()); 

產品類似這樣定義的對象類型的人:

public sealed class Person : KnowYourCustomerBase 
{ 
    [DataMember] 
    public string Surname { get; set; } 

    [DataMember] 
    public string FirstName { get; set; } 

    [DataMember] 
    public string MiddleName { get; set; } 

    [DataMember] 
    public string Address4 { get; set; } 

    [DataMember] 
    public string DateOfBirth { get; set; } 

    [DataMember] 
    public string NationalID { get; set; } 

    [DataMember] 
    public string Gender { get; set; } 
} 

我如何編輯獲取所有屬性的代碼行,並將其返回爲除了NationalID以外的所有其他屬性?

回答

2
var toExclude = new HashSet<string>("NationalID", ...); 

var props = item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance). 
      Where(property => !toExclude.Contains(property.Name)); 

替換...你要排除的其他屬性的名稱和Enumerable.Where將只保留未在收集那些。