介绍

Objects Comparer 是一个对象比较工具。 c#中常见的数据结构都可以用这个三方库来对比,更复杂的对象也可以对比。

简而言之,Objects Comparer 是一个对象到对象的比较器,

它允许逐个成员递归地比较对象,并为某些属性、字段或类型定义自定义比较规则。

安装

nuget 搜索 ObjectsComparer

使用

首先我们定义一个简单的类

   public class UserInfomation     {        public string Name { get; set; }        public int Age { get; set; }        public string Sex { get; set; }    }

然后实例化两个UserInfomation对象,并赋不同的值

然后我们实例化 ObjectsComparer.Comparer 比较器

var comparer1 = new ObjectsComparer.Comparer();

然后我们将实例化的两个对象传递给 ObjectsComparer.Comparer 方法

 IEnumerable differences1; var isEqual1 = comparer1.Compare(userInfomationOld, userInfomationNew, out differences1);

然后通过返回值判断对象是否一致,如果不一致可以通过differences1获取不一致的值

看输出结果可以知道,两个实例化对象的age属性值不同 。

c#字段和属性区别_数据库表格属性,字段_java 属性 字段 变量

那我们再试试List类型

 List lstUserInfomationsOld=new List();            for (int i = 0; i < 3; i++)            {                UserInfomation user=new UserInfomation();                user.Name = "张三";                user.Age = 30;                user.Sex = "男";                lstUserInfomationsOld.Add(user);            }            List lstUserInfomationsNew = new List();            for (int i = 0; i < 2; i++)            {                UserInfomation user = new UserInfomation();                user.Name = "李四";                user.Age = 30;                user.Sex = "男";                lstUserInfomationsNew.Add(user);            }

var comparer = new ObjectsComparer.Comparer<List>(); IEnumerable differences; var isEqual = comparer.Compare(lstUserInfomationsNew, lstUserInfomationsOld, out differences); string differencesMsg = string.Join(Environment.NewLine, differences); Console.WriteLine(differencesMsg);

查看输出c#字段和属性区别,可以看出数字不一致

c#字段和属性区别_java 属性 字段 变量_数据库表格属性,字段

应用场景

做过.net客户端开发的都知道,我们在维护一些基础数据的时候,都免不了要编辑数据!

有时候我们打开编辑页面,但是数据还没有修改,然后点击保存按钮,或者一个一个对比数据,看看数据有没有被修改

或者直接暴力破解,不检查数据是否被修改c#字段和属性区别,直接调用更新接口

然后我们的对象比较器就派上用场了

我们先封装一个BaseForm

然后在基类控件中封装一个比较方法

  protected Result ComPare(T t, T s)        {            Result result =new Result();            var comparer = new ObjectsComparer.Comparer();            IEnumerable differences;            bool isEqual = comparer.Compare(t, s, out differences);            result.IsEqual = isEqual;            if (!isEqual)            {                  string differencesMsg = string.Join(Environment.NewLine, differences);                result.Msg=differencesMsg;            }            return result;        }        public class Result    {         public bool IsEqual { get; set; }        public string Msg { get; set; }

当我们打开编辑页面时,我们会加载当前页面的数据

这时候我们可以拿到未编辑的数据,设置为全局变量

然后在保存的时候,我们就可以得到编辑好的对象

这个时候我们会调用基类的比较方法

获取两个对象之间的值是否发生变化,如果没有发生变化,我们会给出“数据未修改,请关闭表单”等提示

   public partial class MainFrm : BaseForm    {        Test _testOld;        public MainFrm()        {            InitializeComponent();            _testOld = LoadData();            txtName.Text= _testOld.Name;            txtAge.Text = _testOld.Age.ToString();            txtSex.Text = _testOld.Sex;        }        private Test LoadData()        {            Test test = new Test();            test.Name = "张三";            test.Age = 30;            test.Sex = "男";            return test;

}

private void uiButton1_Click(object sender, EventArgs e) { Test test=new Test(); test.Name =txtName.Text; test.Age =int.Parse( txtAge.Text); test.Sex=txtSex.Text; Result result= ComPare(_testOld, test); if (result.IsEqual) { MessageBox.Show("数据未修改"); return; } //然后再写保存逻辑 MessageBox.Show("保存成功"); } } public class Test { public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } }

当然应用场景还有很多,我只分享我经常用到的。

最后,希望各位网友分享更多好用的工具,共同改善网络环境!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注