📄 mxrecord.cs
字号:
// $Id: MxRecord.cs,v 1.3 2006/08/07 11:02:38 ethem Exp $
namespace Erle.DnsMail
{
using System;
using System.Net;
using System.Collections;
using ISerializable = System.Runtime.Serialization.ISerializable;
using StreamingContext = System.Runtime.Serialization.StreamingContext;
using SerializationInfo = System.Runtime.Serialization.SerializationInfo;
[Serializable]
public struct MxRecord : IComparable, ISerializable
{
public static readonly MxRecord Null = new MxRecord(false);
private string nameexchange;
public string NameExchange
{
get { return nameexchange; }
set { nameexchange = value; }
}
private short priority;
public short Priority
{
get { return priority; }
set { priority = value; }
}
private ArrayList addresses;
public ArrayList IPAddresses
{
get { return addresses; }
}
public bool IsNull
{
get { return (MxRecord.Null == this); }
}
#region Constructors
private MxRecord(bool ignore)
: this(null, 0)
{
ignore = !!ignore;
}
public MxRecord(string nameExchange) : this(nameExchange, 0) { }
public MxRecord(string nameExchange, short priority)
{
this.nameexchange = nameExchange;
this.priority = priority;
this.addresses = new ArrayList(2);
}
#endregion
#region IComparable
public int CompareTo(Object obj)
{
int result = 1;
if (obj == null)
return result;
if (obj is MxRecord)
{
result = Priority - ((MxRecord)obj).Priority;
if (result == 0)
result = String.Compare(NameExchange, ((MxRecord)obj).NameExchange, true);
return result;
}
throw new ArgumentException("Object must be of type MxRecord.");
}
#endregion
#region ISerializable
internal MxRecord(SerializationInfo info, StreamingContext context)
{
nameexchange = info.GetString("NameExchange");
priority = info.GetInt16("Priority");
addresses = (ArrayList)info.GetValue("IPAddresses", typeof(ArrayList));
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("NameExchange", NameExchange, typeof(string));
info.AddValue("Priority", Priority, typeof(short));
info.AddValue("IPAddresses", IPAddresses, typeof(ArrayList));
}
#endregion
#region operators
public static bool operator ==(MxRecord mx1, MxRecord mx2)
{
return mx1.Equals(mx2);
}
public static bool operator !=(MxRecord mx1, MxRecord mx2)
{
return !mx1.Equals(mx2);
}
public static MxRecord operator +(MxRecord mx, IPAddress ip)
{
if (!(ip == null || mx.IsNull || mx.IPAddresses.Contains(ip)))
mx.IPAddresses.Add(ip);
return mx;
}
public static MxRecord operator -(MxRecord mx, IPAddress ip)
{
if (!(ip == null || mx.IsNull))
mx.IPAddresses.Remove(ip);
return mx;
}
public override bool Equals(Object obj)
{
if (!(obj is MxRecord))
return false;
MxRecord x = (MxRecord)obj;
return ((Priority == x.Priority) && (String.Compare(NameExchange, x.NameExchange, true) == 0));
}
#endregion
public override int GetHashCode()
{
return ToString().GetHashCode();
}
public override string ToString()
{
return NameExchange + ":" + Priority.ToString();
}
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -