C# 比较两个对象的属性值是不是有改变

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 比较两个对象的属性值是不是有改变相关的知识,希望对你有一定的参考价值。

写一个方法public string Method(Type t1,Type t2),t1和t2是同一个实体类(字段的属性值不同),方法是想比较实体类里那些字段的值发生变发并返回,但是这个通用的方法需要支持比较不同类型的实体类(比如说比较两个User的对象,两个Product的对象等等),里面传入的Type类型用什么,怎样实现。求高手解答,答案满意追加分数

如果你要比较的可能是多种对象,那么这里 Type需要用object 类型了;
因为不同对象之间属性的数量不一致,你需要参考这个 http://www.cnblogs.com/Byrd/archive/2012/08/21/2649518.html 文章来遍历属性值进行比较了
参考技术A object啊
Type type = t1.GetType();
PropertyInfo[] pis = type.GetProperties();
参考技术B 不知道用泛型嘛 =-=

public String Method<T>(T t1, T t2);

C#中的==EqualReferenceEqual

一:前言

C#中==、Equals、ReferenceEquals都可以用于判断两个对象的个体是不是相等


二:==运算符

——对于值类型,比较的是两个对象的代数值是否相等,比较时会自动进行类型转换(自定义值类型需要重载运算符后才可以使用==比较)
——对于引用类型,比较的是两个对象的引用(string类型比较的是值)

private void Awake()
{
    int a = 1;
    long b = 1;
    Debug.Log(a == b);//true

    string s1 = "string";
    string s2 = "string";
    Debug.Log(s1 == s2);//true

    StringBuilder sb1 = new StringBuilder("StringBuilder");
    StringBuilder sb2 = new StringBuilder("StringBuilder");
    Debug.Log(sb1 == sb2);//false
}

三:Equals

——对于值类型,比较的是两个对象的代数值是否相等,比较时不会自动进行类型转换(自定义值类型需要重载运算符后才可以使用==比较)
——对于引用类型,比较的是两个对象的地址(string类型比较的是值)

private void Awake()
{
    int a = 1;
    long b = 1;
    Debug.Log(a.Equals(b));//false

    string s1 = "string";
    string s2 = "string";
    Debug.Log(s1.Equals(s2));//true

    StringBuilder sb1 = new StringBuilder("StringBuilder");
    StringBuilder sb2 = new StringBuilder("StringBuilder");
    Debug.Log(sb1.Equals(sb2));//false
}

四:ReferenceEquals

——对于值类型,返回值总是为false,因为装箱后的引用总是不同的
——对于引用类型,比较的是两个对象的引用(string类型比较的是值)

private void Awake()
{
    int a = 1;
    long b = 1;
    Debug.Log(ReferenceEquals(a, b));//false

    string s1 = "string";
    string s2 = "string";
    Debug.Log(ReferenceEquals(s1, s2));//true

    StringBuilder sb1 = new StringBuilder("StringBuilder");
    StringBuilder sb2 = new StringBuilder("StringBuilder");
    Debug.Log(ReferenceEquals(sb1, sb2));//false
}

五:总结

对于值类型和特殊的string类型使用==运算符进行比较,对于引用类型使用Equals

以上是关于C# 比较两个对象的属性值是不是有改变的主要内容,如果未能解决你的问题,请参考以下文章

原始值

如何判断两个对象的值是不是相等java

C#中的==EqualReferenceEqual

C#中的==EqualReferenceEqual

c# 把对象加入队列,对象为全局变量,对象改变队列值也跟着改变

如何在 C# 中快速检查两个数据传输对象是不是具有相同的属性?