读书人

c# distinct自定义重写步骤

发布时间: 2013-03-12 11:19:35 作者: rapoo

c# distinct自定义重写方法

现在有一个类定义如下

public class CreateTestUnitSrvInputCollection

{

private int mParentId;
/// <summary>
/// 所属构建标签ID/或文件夹ID
/// </summary>
public int ParentId
{
get
{
return mParentId;
}
set
{
mParentId = value;
}
}


private int mParentType;
/// <summary>
/// 所属父类的文件类型 2文件夹 1构建标签
/// </summary>
public int ParentType
{
get
{
return mParentType;
}
set
{
mParentType = value;
}
}

}

现在有一个List<CreateTestUnitSrvInputCollection > 其中里面有一些数据是相同的(即其中ParentId和ParentType的值都相同)

那么这个时候你如果调用distinct的方法话 是去除不掉这些相同项的 因为在c#中实例化一个类后给他的是一个 区分它们的是一个什么东西我也想不起来了

所以这个时候 如果你想自定义去除相同项的话 那就要继续IEqualityComparer接口

实现代码如下

public class CreateTestUnitSrvInputCollection : System.Collections.Generic.IEqualityComparer<CreateTestUnitSrvInputCollection>

{

private int mParentId;
/// <summary>
/// 所属构建标签ID/或文件夹ID
/// </summary>
public int ParentId
{
get
{
return mParentId;
}
set
{
mParentId = value;
}
}


private int mParentType;
/// <summary>
/// 所属父类的文件类型 2文件夹 1构建标签
/// </summary>
public int ParentType
{
get
{
return mParentType;
}
set
{
mParentType = value;
}
}

#region IEqualityComparer<CreateTestUnitSrvInputCollection> 成员

public bool Equals(CreateTestUnitSrvInputCollection x, CreateTestUnitSrvInputCollection y)
{

//这个地方就是定义判断什么情况下是相同的元素代码 如果你就是想通过一个字段去判断 那么就用一个 这个就行x.ParentId==y.ParentId
return x.ParentId==y.ParentId&&x.ParentType==y.ParentType;
}

public int GetHashCode(CreateTestUnitSrvInputCollection obj)
{
return 0;
}

#endregion

}

以上就可以自定义distinct自己想过滤的元素

读书人网 >C#

热点推荐