C#两个复杂对象集合的比较
2010-04-20 23:40
253 查看
private void test() {
List<ITT
> ts = new List<ITT
>();
ts.Add(new TT("rongs",10,"zhutou"));
ts.Add(new TT("rongrong", 10, "zhutou"));
ts.Add(new TT("rr", 10, "zhutou"));
ts.Add(new TT("wgr", 10, "zhutou"));
TT t = new TT("wgr", 10, "zhutou");
bool bc = ts.Contains
(t);
Console.WriteLine(bc); //true
}
// 扩展该函数可对两个集合进行细致比较
private List<ITT
> FindDif(List<ITT
> ts1, List<ITT
> ts2) {
List<ITT
> difT = new List<ITT
>();
if (ts1== null || ts1.Count == 0) {
return ts2;
}
foreach (ITT t
in ts2) {
if (!ts1.Contains(t
)) {
difT.Add(t
);
}
}
return difT;
}
public interface ITT
: IEquatable
<ITT
> {
string Name { get; set; }
string Address { get; set; }
int Age { get; set; }
}
public class TT : ITT {
public TT(string name, int age, string address) {
this.name = name;
this.age = age;
this.address = address;
}
private string name;
public string Name {
get { return name; }
set { name = value; }
}
private int age;
public int Age {
get { return age; }
set { age = value; }
}
private string address;
public string Address {
get { return address; }
set { address = value; }
}
#region IEquatable<TT> Members
public bool Equals(ITT other) {
return name.Equals(other.Name) && age.Equals(other.Age) && address.Equals(other.Address);
}
#endregion
}
MSDN参考资料
List<
(Of
<
(
T
>
)
>
)
.
.
::
.
Contains
Method
This method determines equality using the default equality comparer EqualityComparer<
(Of
<
(
T>
)
>
)
.
.
::
.
Default
for
T
, the type of values in the list.
EqualityComparer<
(Of
<
(
T>
)
>
)
.
.
::
.
Default
The Default
property checks whether type T
implements the System.
.
::
.
IEquatable<
(Of
<
(
T>
)
>
)
generic interface and if so returns an EqualityComparer<
(Of
<
(
T>
)
>
)
that uses that implementation.
Otherwise it returns an EqualityComparer<
(Of
<
(
T>
)
>
)
that uses the overrides of Object.
.
::
.
Equals
and Object.
.
::
.
GetHashCode
provided by T
.
List<ITT
> ts = new List<ITT
>();
ts.Add(new TT("rongs",10,"zhutou"));
ts.Add(new TT("rongrong", 10, "zhutou"));
ts.Add(new TT("rr", 10, "zhutou"));
ts.Add(new TT("wgr", 10, "zhutou"));
TT t = new TT("wgr", 10, "zhutou");
bool bc = ts.Contains
(t);
Console.WriteLine(bc); //true
}
// 扩展该函数可对两个集合进行细致比较
private List<ITT
> FindDif(List<ITT
> ts1, List<ITT
> ts2) {
List<ITT
> difT = new List<ITT
>();
if (ts1== null || ts1.Count == 0) {
return ts2;
}
foreach (ITT t
in ts2) {
if (!ts1.Contains(t
)) {
difT.Add(t
);
}
}
return difT;
}
public interface ITT
: IEquatable
<ITT
> {
string Name { get; set; }
string Address { get; set; }
int Age { get; set; }
}
public class TT : ITT {
public TT(string name, int age, string address) {
this.name = name;
this.age = age;
this.address = address;
}
private string name;
public string Name {
get { return name; }
set { name = value; }
}
private int age;
public int Age {
get { return age; }
set { age = value; }
}
private string address;
public string Address {
get { return address; }
set { address = value; }
}
#region IEquatable<TT> Members
public bool Equals(ITT other) {
return name.Equals(other.Name) && age.Equals(other.Age) && address.Equals(other.Address);
}
#endregion
}
MSDN参考资料
List<
(Of
<
(
T
>
)
>
)
.
.
::
.
Contains
Method
This method determines equality using the default equality comparer EqualityComparer<
(Of
<
(
T>
)
>
)
.
.
::
.
Default
for
T
, the type of values in the list.
EqualityComparer<
(Of
<
(
T>
)
>
)
.
.
::
.
Default
The Default
property checks whether type T
implements the System.
.
::
.
IEquatable<
(Of
<
(
T>
)
>
)
generic interface and if so returns an EqualityComparer<
(Of
<
(
T>
)
>
)
that uses that implementation.
Otherwise it returns an EqualityComparer<
(Of
<
(
T>
)
>
)
that uses the overrides of Object.
.
::
.
Equals
and Object.
.
::
.
GetHashCode
provided by T
.
相关文章推荐
- 用java比较两个集合对象中不一样的元素。
- C#中比较两个对象的地址是否相同(也是引用计数的问题,和Java一样)
- C#比较两个list集合,两集合同时存在或A集合存在B集合中无
- 关于直接比较两个对象是否相等或则说List集合里是否包含某个对象的问题
- C# 实体/集合差异比较,比较两个实体或集合值是否一样,将实体2的值动态赋值给实体1(名称一样的属性进行赋值)
- C#中比较两个对象的地址是否相同
- Java 查找两个有复杂对象的集合中的不同元素和相同的元素
- More Effective C# 第21条、第22条 实例代码解析(可比较 可排序 自定义对象集合完整演示) IEquatable, IComparable,IEnumerable
- C# 实体/集合差异比较,比较两个实体或集合值是否一样,将实体2的值动态赋值给实体1(名称一样的属性进行赋值)
- 黑马程序员一在hashSet集合中比较对象需要覆盖的两个方法hashCode(),equlas()
- C# 比较两个路径是否指向同一对象
- C#比较两个类型一样的实体类对象的值
- C#比较两个list集合,两集合同时存在或A集合存在B集合中无
- C#使用Equals()方法比较两个对象是否相等的方法
- 比较两个list集合是否相等
- c# 比较两个string数组(string[])每一个值是否相等
- 两个List比较各自对象的属性相同的问题
- 在C#中,比较两个数组的不同值.输出出来对于日常.NET编程比较实用
- C# 3.0新特征之创建和初始化集合对象
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)