如何根据他们的方法比较两个类?

Roc*_*ngh 0 .net c# reflection

我想通过比较另一个类来找出一个类中缺少的属性

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

}
Run Code Online (Sandbox Code Playgroud)

上面我应该得到类似"UserID"的输出,"UserName"中缺少"LastName"属性.

I4V*_*I4V 10

var list = typeof(User).GetProperties().Select(x => x.Name)
           .Except(typeof(UserDTO).GetProperties().Select(y => y.Name))
           .ToList();
Run Code Online (Sandbox Code Playgroud)

编辑

在评论和公众中包括建议 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);
}
Run Code Online (Sandbox Code Playgroud)


Wil*_*lem 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);
Run Code Online (Sandbox Code Playgroud)

考虑到所有继承属性也将出现在这些名单,除非你要跟指定BindingFlags.DeclaredOnlyGetProperties()方法,看到的BindingFlags.