0

他のクラスを比較して、あるクラスで不足しているプロパティを見つけたい

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, "LastName" properties are missing in UserDTO.

4

2 に答える 2

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);
}
于 2013-04-15T11:25:27.093 に答える
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しない限り、継承されたすべてのプロパティもこれらのリストに存在することを考慮してください。 BindingFlagsを参照してください。GetProperties()

于 2013-04-15T11:25:04.997 に答える