gpt4 book ai didi

c# - 您如何创建一个动态相等实现,您可以在其中传递要比较的属性名称?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:57 25 4
gpt4 key购买 nike

假设我有一个具有以下属性的对象 Person:

    public class Person
{
public int ID { get; set; }
public int EmployeeNo { get; set; }
public string JobDescription { get; set; }
public string Code { get; set; }
}

如何按名称动态检查特定属性的相等性?

例如。

var dynamicEqualityComparer = RetrieveDynamicEqualityComparer("ID", "JobDescription");
var intersectedPersons = listOfPerson1.Intersect(listOfPerson2, dynamicEqualityComparer);

上面的代码片段将使用默认的 linq intersect 方法,使用动态生成的相等比较方法,该方法只比较字段“ID”和“JobDescription”。

我认为像这样的东西很容易找到,但到目前为止还没有找到任何类似的东西。

最佳答案

把它放在你的 person 类中,然后你可以用你的实例调用 equals

    public override bool Equals(object obj)
{
return obj.ToString() == this.ToString();
}

public override int GetHashCode()
{
return this.ToString().GetHashCode();
}

public override string ToString()
{
string myState;
myState = string.Format("[ID: {0};EmployeeNo : {1}; JobDescription: {2};Code :{3}]",ID,EmployeeNo,JobDescription,Code);
return myState;
}

由于对所有状态数据的 tostring 覆盖,在覆盖中等于你只需利用您自己的 ToString() 实现即可。

public int Compare(Person x, Person y)
{
if (x.ID == y.ID && x.JobDescription == y.JobDescription)
return 0;

return (x.ID > y.ID) ? 1 : -1;//here you put what condition to return here i put ID just
//for clarity,if u want just return -1 for ex:
}

这是 Person 类型的 IComparer<> 接口(interface)的实现

关于c# - 您如何创建一个动态相等实现,您可以在其中传递要比较的属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17015566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com