我有两个对象。
public class GlobalSettings
{
public bool A { get; set; }
public bool B { get; set; }
public bool C { get; set; }
public bool D { get; set; }
}
public class UserSettings
{
public bool A { get; set; }
public bool B { get; set; }
public bool C { get; set; }
public bool D { get; set; }
}我需要比较这两个对象。
例如。
从GlobalSettings属性中,A值为false意味着我要从UserSettings中删除该属性。然后我需要从UserSettings中删除属性A,如下所示。
public class UserSettings
{
public bool B { get; set; }
public bool C { get; set; }
public bool D { get; set; }
}可以这样做吗?linq
发布于 2013-05-15 18:13:36
如果你真的想自动化这一点,你可以使用Linq和反射。
var query = from aProp in a.GetType().GetProperties()
let aValue = aProp.GetValue(a)
let bProp = b.GetType().GetProperty(aProp.Name)
let bValue = bProp.GetValue(b)
where !aValue.Equals(bValue)
select new { aProp.Name, aValue, bValue };
var allTheSame = !query.Any();发布于 2013-05-15 18:16:15
考虑到你问题中的“删除”部分,我认为你最好使用Dictionary而不是Type来进行设置。
不能从普通的静态C#类型中删除属性,但是可以使用Remove(key)方法轻松地从字典中删除条目。
发布于 2013-05-15 18:32:52
尝试如下所示:UserSettings继承自GlobalSettings,在本例中,如果您使用UserSettings.A,if将在其父类中检查这是否为假,如果为假,则使用UserSettings.A,如果为真,则使用GlobalSettings.A。
public class GlobalSettings
{
public virtual bool A { get; set; }
}
public class UserSettings : GlobalSettings
{
public override bool A
{
get
{
return base.A ? base.A : A;
}
set
{
this.A = value;
}
}
}https://stackoverflow.com/questions/16562203
复制相似问题