首页 > 编程语言 >C# 获取修改了哪些属性

C# 获取修改了哪些属性

时间:2024-07-27 13:53:29浏览次数:7  
标签:哪些 C# v1 v2 var new null public 属性

public class Program
{

  static public Dictionary<string, Tuple<object, object>> GetChangedProperties<T>(T a, T b) where T : class
  {
    if ( a != null && b != null )
    {
      if ( Object.Equals(a, b) )
      {
        return new Dictionary<string, Tuple<object, object>>();
      }
      var allProperties = a.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
      var result = new Dictionary<string, Tuple<object, object>>();
      foreach ( var p in allProperties )
      {
        var v1 = p.GetValue(a);
        var v2 = p.GetValue(b);
        if ( !Object.Equals(v1, v2) )
          result.Add(p.Name, new Tuple<object, object>(v1, v2));
      }
      return result;
    }
    else
    {
      var aText = $"{( a == null ? ( "\"" + nameof(a) + "\"" + " was null" ) : "" )}";
      var bText = $"{( b == null ? ( "\"" + nameof(b) + "\"" + " was null" ) : "" )}";
      var bothNull = !string.IsNullOrEmpty(aText) && !string.IsNullOrEmpty(bText);
      throw new ArgumentNullException(aText + ( bothNull ? ", " : "" ) + bText);
    }
  }

  public class Test
  {
    public int A { get; set; }
    public int B { get; set; }
  }

  static void Main(string[] args)
  {

    var v1 = new Test { A = 10, B = 20 };
    var v2 = new Test { A = 5, B = 20 };

    var list = GetChangedProperties(v1, v2);

    foreach ( var item in list )
      Console.WriteLine($"{item.Key}: {item.Value.Item1.ToString()} != {item.Value.Item2.ToString()}");

    Console.ReadKey();
  }

}

 

标签:哪些,C#,v1,v2,var,new,null,public,属性
From: https://www.cnblogs.com/gxivwshjj/p/18326852

相关文章

  • 我可以使用哪些技术来改进微弱阴影的检测?
    我每10分钟拍摄一次放在太阳前面的10厘米钉子阴影的图像。然而,我在清晨和傍晚时面临着挑战,当时阴影变得微弱而苍白,使我的算法很难检测到它们。这是我试图检测的微弱阴影的示例:当阴影颜色丰富或强烈时,我的算法成功检测到它。然而,在阴影较弱的情况下,它无法识别该......
  • 如何将 Brave 网络浏览器与 python、selenium 和 chromedriver 结合使用?
    我从Google的Chrome切换到Brave网络浏览器并且很难让它像Chrome一样与Brave一起使用。Brave是基于Chromium的,所以我猜它应该不会那么难。我确保我的Brave和Chromedriver处于相同版本,像这样,~/some/path$chromedriver--versionChromeDriver76.0.3......
  • c中int型和浮点型的格式话输出
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c//测试程序#include<stdio.h>intmain(void){inti=10;printf("i1=%d\n",i);printf("i2=%f\n",i);retur......
  • 【Android驱动05】通过U-Boot来设置启动参数cmdline将数据传递给应用层的方法
    在Android系统中,通过U-Boot(通常称为uboot)来设置启动参数(如cmdline)或尝试直接将数据传递给应用层(通过系统属性property)是一个较为间接的过程,因为U-Boot主要负责硬件初始化和引导Linux内核,而Android系统属性则是由Android系统服务(如init进程和property服务)管理的。不过,我们可......
  • 单点故障克星:Memcached的高可用性策略
    单点故障克星:Memcached的高可用性策略在构建分布式系统时,Memcached作为一个广泛使用的高性能分布式内存缓存系统,其单点故障问题不容忽视。单点故障指的是系统中的一个组件发生故障导致整个系统或服务不可用。本文将深入探讨如何避免Memcached的单点故障问题,确保缓存服务的......
  • 隔离的艺术:Conda包依赖管理全解析
    隔离的艺术:Conda包依赖管理全解析在软件开发的复杂世界中,依赖管理是维护项目健康的关键。Conda,作为科学计算领域的首选包管理器,提供了强大的依赖隔离功能,帮助开发者避免“依赖地狱”。本文将深入探讨如何在Conda中使用包依赖隔离,确保你的项目环境既干净又稳定。1.依赖隔......
  • Navicat premium最新【16/17 版本】安装下载教程,图文步骤详解(超简单,一步到位,免费下载
    文章目录软件介绍软件下载安装步骤激活步骤软件介绍Navicat是一款快速、可靠且功能全面的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设计。以下是对Navicat的详细介绍:一、产品概述开发目的:Navicat旨在通过其直观和设计完善的用户界面,帮助数据库管......
  • 为什么我检查了 numpy、scikitlearn 和 scipy 的版本号却无法安装 NLTK?
    我运行了代码importnltkfromnltk.stemimportPorterStemmerfromnltk.tokenizeimportword_tokenizenltk.download('punkt')如果我运行我的代码,我会看到以下内容:File"sklearn/utils/murmurhash.pyx",line1,initsklearn.utils.murmurhashValueError:nu......
  • Team center表格开发样例 --转自PLMCode
    第一步:分别在自己的模块下的html、viewmodel、js文件夹下,加入下列三个文件simpleTableTestPageTableView.html、simpleTableTestPageTableViewModel.json、simpleTableTestPageService.js第二步:simpleTableTestPageTableView.html<aw-splm-tablegridid="exampleTable"></aw-spl......
  • ScheduledThreadPoolExecutor
    定时任务ScheduledThreadPoolExecutor类有两个用途:指定时间延迟后执行任务;周期性重复执行任务。JDK1.5之前,主要使用Timer类来完成定时任务,但是Timer有以下缺陷:Timer是单线程模式;如果在执行任务期间某个TimerTask耗时较久,就会影响其它任务的调度;Timer的任务调度是基于......