我想通过比较另一个类
找出一个类中缺少的属性public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class UserDTO
{
public string UserName { get; set; }
public string FirstName { get; set; }
}
上面我应该得到类似“UserID”的输出,“UserDTO”中缺少“LastName”属性。
答案 0 :(得分:10)
var list = typeof(User).GetProperties().Select(x => x.Name)
.Except(typeof(UserDTO).GetProperties().Select(y => y.Name))
.ToList();
修改强>
在评论和公开Fields
public static IEnumerable<string> Diff(Type t1, Type t2)
{
return t1.GetProperties().Select(p1 => new { Name = p1.Name, Type = p1.PropertyType })
.Concat(t1.GetFields().Select(f1 => new { Name = f1.Name, Type = f1.FieldType }))
.Except(t2.GetProperties().Select(p2 => new { Name = p2.Name, Type = p2.PropertyType })
.Concat(t2.GetFields().Select(f2 => new { Name = f2.Name, Type = f2.FieldType })))
.Select(a => a.Name);
}
答案 1 :(得分:7)
使用反射来获取属性,请参阅Type.GetProperties。然后比较两个属性列表以找到缺失的属性列表。
var UserProperties = typeof(User).GetProperties().Select(p => p.Name);
var UserDTOProperties = typeof(UserDTO).GetProperties().Select(p => p.Name);
var missingProperties = UserProperties.Except(UserDTOProperties);
考虑到所有继承的属性也会出现在这些列表中,除非您为BindingFlags.DeclaredOnly
方法指定GetProperties()
,请参阅BindingFlags。