public int CompareTo(object obj)
{
Email other;
try
{
other = (Email)obj;
}
catch (InvalidCastException)
{
throw new ArgumentException("obj is not an Email");
}
if (IsEmpty && other.IsEmpty) return 0;
if (IsEmpty) return -1;
return string.CompareOrdinal(value, other.value);
}