程序运行结果如下:
没有显示完全,后面一组输出和上面最后一组相同(只是使用了自定义的比较器)。
5.SequenceEqual 比较两个序列是否相等
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SequenceEqual
{
/// <summary>
///
/// </summary>
class Program
{
static void Main(string[] args)
{
//5.SequenceEqual 比较两个序列是否相等
//a比较两个序列
string[] names1 ={ "DebugLZQ","Sarah","Jerry","Jeffrey","M&M"};
List<string> names2 = new List<string> { "DebugLZQ", "Sarah", "Jerry", "Jeffrey", "M&M" };
bool equalornot = names1.SequenceEqual(names2);
bool equalornot2 = names1.Skip(3).Take(2).SequenceEqual(names2.Take(3).SkipWhile(n=>n.Length==3));
Console.WriteLine("{0},{1}",equalornot,equalornot2 );
Console.WriteLine("----------------------------");
Console.ReadKey();
//b自定义比较器
bool equalornot3 = names1.SequenceEqual(names2, new MyEqualityComparer<string>(names2.ToArray()));
Console.WriteLine("{0}",equalornot3);
Console.ReadKey();
}
}
}
自定义的比较器如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SequenceEqual
{
//DebugLZQ提示:
//如不知道具体的接口实现
//可以用vs提供的自动实现接口功能实现这个接口
class MyEqualityComparer<T> : IEqualityComparer<T>
{
private string[] sec;
public MyEqualityComparer(string[] s)
{
sec = s;
}
#region IEqualityComparer<T> 成员
public bool Equals(T x, T y)
{
string temp = x as string;
if (x != null)
{
return sec.Contains(temp);
}
return false;
}
public int GetHashCode(T obj)
{
return obj.GetHashCode();
}
#endregion
}
}
可以使用VS自动实现接口的智能提示,完成接口的实现。
接口的实现方式有“实现接口”和“显式实现接口”之分,上面这种实现方式即“显示接口”方式,“显示实现接口”最显著的特征是实现的接口方法加了个完全限定名,这样显式实现之后,无法通过具体的类名来访问接口方法,只能通过接口名来访问,这样可以隐藏类的复杂性。











