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# 比较两个对象的属性值是不是有改变的主要内容,如果未能解决你的问题,请参考以下文章