0

我有两个对象。

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. 然后我需要AUserSettings下面删除属性。

public class UserSettings
{
    public bool B { get; set; }
    public bool C { get; set; }
    public bool D { get; set; }
}

有可能这样做linq吗?

4

3 回答 3

1

Dictionary鉴于您问题的“删除”部分,我认为使用 a而不是 a进行设置会更好Type

您不能从普通的静态 C# 类型中删除属性,但您可以使用该Remove(key)方法轻松地从字典中删除条目。

于 2013-05-15T10:16:14.667 回答
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();
于 2013-05-15T10:13:36.453 回答
0

尝试这样的事情:UserSettings继承自GlobalSettings并且在此示例中,如果您使用 UserSettings.A,if 将检查其父类中是否为 false,如果为 false,则使用 UserSettings.A,如果为 true,则使用 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;
        }
    }
}
于 2013-05-15T10:32:51.620 回答