C# 判斷兩個清單(集合) 是否一緻
public static Class CollectionHelper{
/// <summary>
/// 判斷兩個集合是否相等
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sourceCollection">源清單</param>
/// <param name="targetCollection">目标清單</param>
/// <param name="comparable">判斷相等的方法</param>
/// <returns></returns>
public static bool EqualList<T>(this IList<T> sourceCollection, IList<T> targetCollection, Func<T, T, bool> comparable) where T : class
{
//空集合直接傳回False,即使是兩個都是空集合,也傳回False
if (sourceCollection == null || targetCollection == null)
{
return false;
}
if (object.ReferenceEquals(sourceCollection, targetCollection))
{
return true;
}
if (sourceCollection.Count != targetCollection.Count)
{
return false;
}
foreach (var s in sourceCollection)
{
Action func = null;
foreach (var t in targetCollection)
{
if (comparable(s, t))
{
func = () => { targetCollection.Remove(t); };
break;
}
}
if (func == null)
return false;
func?.Invoke();
}
if (targetCollection.Count == 0)
return true;
return false;
}
}
public class Temp{
public string a {get;set;}
public string b {get;set;}
public string c {get;set;}
}
main(){
List<Temp> source=new List<Temp>();
List<Temp> target=new List<Temp>();
Console.WriteLine(source.EqualList(target, (s, t) => s.a == t.b)))
}