说实话,我看了一些资料,也看了一些msdn,还是有点模糊。
这里把一些思考记录下来。
老生常谈,c#分为值类型和引用类型。
==是对equals的重载,对于值类型,比较的是值内容,对于引用类型,比较的是地址。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 比较相等
{
class Program
{
static void Main(string[] args)
{
int[] a1 = {
2, 4, 6, 8 };
int[] a2 = {
2, 4, 6, 8 };
if ( a1.Equals(a2)) //a1.SequenceEqual(a2))
Console.WriteLine("相等");
else
Console.WriteLine("不相等");
Console.Read();
}
}
}
很显然,无论是equals或者a1==a2,数组属于引用,地址不相等。
当然,因为微软对string类型单独处理过,所以string尽管是引用类型,但表现出来的特点也是值类型。
string a1 = "abc";
string a2 = "abc";
想对两个数组判断相等,方法之一是循环每一个元素进行判断,第二种方法是使用SequenceEqual。
这个SequenceEqual又是个什么东西?
SequenceEqual和Enumerable.SequenceEqual是一个含义,只不过前者属于扩展,用于实例,后者属于静态。
两种调用效果一样。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 比较相等
{
class Program
{
static void Main(string[] args)
{
int[] a1 = {
2, 4, 6, <