gpt4 book ai didi

c# - 用于检查重复项(不同对象、不同字段)的通用 C# 函数

转载 作者:太空宇宙 更新时间:2023-11-03 20:47:37 24 4
gpt4 key购买 nike

我想创建一个通用函数,它获取三个参数(一个对象列表、一个属性名称和一个值)...该函数必须检查重复项。所以:

class A  {
public string description;
public string abbreviation;
}

class B {
public string description;
public string name;
}

我有两个 List 对象……一个有多个 A 类对象,一个有多个 B 类对象。

List <A> listOfA
List <B> listOfB

我想要一个像这样调用的函数:

bool hasDuplicateAbbreviation = CheckDuplicate (listOfA, "abbreviation", "ALG");
bool hasDuplicateName = CheckDuplicate (listOfB, "name", "Mrs. Smith");
bool hasDuplicateDescription = CheckDuplicate (listOfB, "description", "Nice toolkit");

我应该怎么做?

如果相同的函数也可以用于具有整数等级的 C 类,那就太好了:

class C  {
public string description;
public int rank;
}

List <C> listOfC

bool hasDuplicateRank = CheckDuplicate (listOfC, "rank", 2);

最佳答案

需要使用Reflection(需要导入System.Reflection):

public static int CheckDuplicate<T>(IEnumerable<T> input, string field, object value)
{
int count = 0;
Type type = typeof(T);
foreach(var item in input)
{
var fieldInfo = type.GetField(field);
if(fieldInfo!= null)
if(fieldInfo.GetValue(item) == value) count++;
else
{
var propInfo = type.GetProperty(field);
if(propInfo != null && propInfo.GetValue(item) == value) count++;
}
}
return count;
}

这将返回给定值重复的次数。

if(CheckDuplicate(a, "abbreviation", "abbr1") > 1)
{
// there is a duplicate
}

Live Demo

关于c# - 用于检查重复项(不同对象、不同字段)的通用 C# 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59226941/

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