arrays - 如何比较数组的指定类型元素?
问题描述
我有一个扩展方法来判断一个项目是否存在于数组/列表中。
遇到一个问题,如果T是Array/List,如何判断两个元素是否相等?
假设[1, 2]
和[2, 1]
是两个不同的元素。这是我的方法:
public static bool ContainsElement<T>(this IEnumerable<T> list, T target, out T matched)
{
matched = default(T);
if (typeof(T).IsCollection())
{
var targetElements = (target as IEnumerable).Cast<object>();
foreach (var element in list)
{
var innerElements = (element as IEnumerable).Cast<object>();
if (targetElements.Count() == innerElements.Count())
{
bool findDifference = false;
for (int i = 0; i < targetElements.Count(); i++)
{
if (/* How to compare the two element */)
{
findDifference = true;
}
}
if (!findDifference)
{
matched = element;
return true;
}
}
else
{
return false;
}
}
return false;
}
else
{
foreach (var element in list)
{
if (EqualityComparer<T>.Default.Equals(element, target))
{
matched = element;
return true;
}
}
return false;
}
}
我找不到知道如何为数组EqualityComparer<>
元素创建一个的T
方法。我可以通过 typeof(T).GetElementType() 获取元素的类型,但是比较这两个元素似乎没有用。
顺便说一句,IsCollection方法是我检查 T 是数组还是从 IEnumerable 分配的扩展方法。
你能帮助我吗?
解决方案
推荐阅读
- java - JVM 将如何处理 Serializable 中的默认属性?
- java - 在 Java Spring 中解析 XML
- angular - Mute attribute in "mat-video" npm module
- android - 为什么 Android CursorAdapter 调用 3 次相同的操作
- c - Matrix of structure C
- git - Is it possible to auto git add files with VS Code as soon as they're created?
- java - 如何将应用设置为默认应用或让用户选择应用?
- python - 熊猫数据框列到子列
- loops - 更有效地使用游标循环,插入并提交每一行(Oracle)
- c++ - 避免在 C++ 中使用未定义的对象