谈谈值类型与null的判等比较
2010-09-30 21:04:11 来源:WEB开发网如果一个值类型没有重载==运算符,是无法直接使用==来进行值类型的实例和null的判等比较的,这个是显而易见的,默认情况下值类型都没有重载==运算符:
A a;
if(a==null) //
struct A
{
public int x;
}
但是,是否重载了==就可以把值类型的实例和null做判等比较了呢?现在,我们来看一个更加能说明问题的Demo:
using System;
namespace StructOperatorDemo
{
class Program
{
public struct MyStruct1
{
public Guid UniqueId;
public MyStruct1(Guid fUniqueId)
{
this.UniqueId = fUniqueId;
}
}
public struct MyStruct2
{
public int Value;
public MyStruct2(int fValue)
{
this.Value = fValue;
}
public static bool operator !=(MyStruct2 s1, MyStruct2 s2)
{
return s1.Value != s2.Value;
}
public static bool operator ==(MyStruct2 s1, MyStruct2 s2)
{
return s1.Value == s2.Value;
}
public override int GetHashCode()
{
return this.Value;
}
}
static void Main(string[] args)
{
// 错误: 运算符“==”无法应用于 “MyStruct1” 和 “<null>” 类型
// MyStruct1 myStruct1 = new MyStruct1();
// if (myStruct1 == null)
// {
// }
// 正确
MyStruct2 myStruct2;
if (myStruct2 == null)
{
Console.WriteLine("myStruct2==null");
}
}
}
}
更多精彩
赞助商链接