首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于比较2个对象的Linq

用于比较2个对象的Linq
EN

Stack Overflow用户
提问于 2013-05-15 18:06:08
回答 3查看 2.9K关注 0票数 0

我有两个对象。

代码语言:javascript
运行
复制
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,如下所示。

代码语言:javascript
运行
复制
public class UserSettings
{
    public bool B { get; set; }
    public bool C { get; set; }
    public bool D { get; set; }
}

可以这样做吗?linq

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-15 18:13:36

如果你真的想自动化这一点,你可以使用Linq和反射。

代码语言:javascript
运行
复制
  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
EN

Stack Overflow用户

发布于 2013-05-15 18:16:15

考虑到你问题中的“删除”部分,我认为你最好使用Dictionary而不是Type来进行设置。

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

票数 1
EN

Stack Overflow用户

发布于 2013-05-15 18:32:52

尝试如下所示:UserSettings继承自GlobalSettings,在本例中,如果您使用UserSettings.A,if将在其父类中检查这是否为假,如果为假,则使用UserSettings.A,如果为真,则使用GlobalSettings.A。

代码语言:javascript
运行
复制
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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16562203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档