我有两个对象。
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
的属性值,我需要从UserSettings
删除该属性。
例如。
来自GlobalSettings
属性A
的值false
表示我想从UserSettings
中删除该属性。然后我需要从A
中删除属性UserSettings
,如下所示。
public class UserSettings
{
public bool B { get; set; }
public bool C { get; set; }
public bool D { get; set; }
}
是否可以执行此操作linq
?
答案 0 :(得分:1)
如果您真的想要自动化,可以使用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();
答案 1 :(得分:1)
鉴于您的问题中的“删除”部分,我认为使用Dictionary
而不是Type
进行设置会更好。
您无法从普通静态C#类型中删除属性,但可以使用Remove(key)
方法轻松删除词典中的条目。
答案 2 :(得分:0)
尝试这样的事情:UserSettings
继承自GlobalSettings
,在此示例中,如果您使用UserSettings.A,if将检查其父类中是否为false,并使用UserSettings.A if它是假的,而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;
}
}
}