设计一个Enum Class
最近项目中需要将一个枚举类型设计成为一个对应的类,设计结果如下:
Enum Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CompanyName.ProductName.Model.Agency
{
/// <summary>
/// 区域,Design as an Enum Class
/// </summary>
[Serializable]
public class LocationInfo
{
/// <summary>
/// 区域:本地
/// </summary>
public static readonly LocationInfo Local = new LocationInfo("本地");
/// <summary>
/// 区域:外埠
/// </summary>
public static readonly LocationInfo Other = new LocationInfo("外埠");
/// <summary>
/// 私有区域名称字段
/// </summary>
private string locationTypeName;
/// <summary>
/// Initializes a new instance of the <see cref="LocationInfo"/> class.
/// 私有构造函数保证Enum值域的封闭性
/// </summary>
/// <param name="typeName">Name of the type.</param>
private LocationInfo(string typeName)
{
this.locationTypeName = typeName;
}
/// <summary>
/// 根据一个符合指定格式的字符串返回类型实例。
/// </summary>
/// <param name="typeName">Name of the type.</param>
/// <returns>LocationInfo</returns>
public static LocationInfo Parse(string typeName)
{
switch (typeName.Trim())
{
case "Local":
case "本地":
return Local;
case "Other":
case "外埠":
return Other;
default:
return Other;
}
}
/// <summary>
/// 根据一个符合指定格式的整数返回类型实例
/// </summary>
/// <param name="typeId">The type id.</param>
/// <returns>LocationInfo</returns>
public static LocationInfo Parse(int typeId)
{
switch (typeId)
{
case 0:
return Local;
case 1:
return Other;
default:
return Other;
}
}
/// <summary>
/// 将Enum Class 转换成存入数据库中的整数值
/// </summary>
/// <returns>ToDBValue</returns>
public int ToDBValue()
{
return (this.locationTypeName == "本地") ? 0 : 1;
}
/// <summary>
/// 提供重载的"=="操作符,使用locationTypeName来判断是否是相同的LocationInfo类型
/// </summary>
/// <param name="li1">The li1.</param>
/// <param name="li2">The li2.</param>
/// <returns>The result of the operator.</returns>
public static bool operator ==(LocationInfo li1, LocationInfo li2)
{
if (Object.Equals(li1, null))
{
return Object.Equals(li2, null);
}
return li1.Equals(li2);
}
/// <summary>
/// Implements the operator !=.
/// </summary>
/// <param name="li1">The li1.</param>
/// <param name="li2">The li2.</param>
/// <returns>The result of the operator.</returns>
public static bool operator !=(LocationInfo li1, LocationInfo li2)
{
return !(li1 == li2);
}
/// <summary>
/// Determines whether the specified <see cref="System.Object"/> is equal to this instance.
/// </summary>
/// <param name="obj">The <see cref="System.Object"/> to compare with this instance.</param>
/// <returns>
/// <c>true</c> if the specified <see cref="System.Object"/> is equal to this instance; otherwise, <c>false</c>.
/// </returns>
/// <exception cref="T:System.NullReferenceException">
/// The <paramref name="obj"/> parameter is null.
/// </exception>
public override bool Equals(object obj)
{
LocationInfo li = obj as LocationInfo;
if (obj == null)
{
return false;
}
return this.locationTypeName == li.locationTypeName;
}
/// <summary>
/// Returns a hash code for this instance.
/// </summary>
/// <returns>
/// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
/// </returns>
public override int GetHashCode()
{
//return this.locationTypeName.GetHashCode();
return this.ToDBValue();
}
/// <summary>
/// Returns a <see cref="System.String"/> that represents this instance.
/// </summary>
/// <returns>
/// A <see cref="System.String"/> that represents this instance.
/// </returns>
public override string ToString()
{
return this.locationTypeName;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CompanyName.ProductName.Model.Agency
{
/// <summary>
/// 区域,Design as an Enum Class
/// </summary>
[Serializable]
public class LocationInfo
{
/// <summary>
/// 区域:本地
/// </summary>
public static readonly LocationInfo Local = new LocationInfo("本地");
/// <summary>
/// 区域:外埠
/// </summary>
public static readonly LocationInfo Other = new LocationInfo("外埠");
/// <summary>
/// 私有区域名称字段
/// </summary>
private string locationTypeName;
/// <summary>
/// Initializes a new instance of the <see cref="LocationInfo"/> class.
/// 私有构造函数保证Enum值域的封闭性
/// </summary>
/// <param name="typeName">Name of the type.</param>
private LocationInfo(string typeName)
{
this.locationTypeName = typeName;
}
/// <summary>
/// 根据一个符合指定格式的字符串返回类型实例。
/// </summary>
/// <param name="typeName">Name of the type.</param>
/// <returns>LocationInfo</returns>
public static LocationInfo Parse(string typeName)
{
switch (typeName.Trim())
{
case "Local":
case "本地":
return Local;
case "Other":
case "外埠":
return Other;
default:
return Other;
}
}
/// <summary>
/// 根据一个符合指定格式的整数返回类型实例
/// </summary>
/// <param name="typeId">The type id.</param>
/// <returns>LocationInfo</returns>
public static LocationInfo Parse(int typeId)
{
switch (typeId)
{
case 0:
return Local;
case 1:
return Other;
default:
return Other;
}
}
/// <summary>
/// 将Enum Class 转换成存入数据库中的整数值
/// </summary>
/// <returns>ToDBValue</returns>
public int ToDBValue()
{
return (this.locationTypeName == "本地") ? 0 : 1;
}
/// <summary>
/// 提供重载的"=="操作符,使用locationTypeName来判断是否是相同的LocationInfo类型
/// </summary>
/// <param name="li1">The li1.</param>
/// <param name="li2">The li2.</param>
/// <returns>The result of the operator.</returns>
public static bool operator ==(LocationInfo li1, LocationInfo li2)
{
if (Object.Equals(li1, null))
{
return Object.Equals(li2, null);
}
return li1.Equals(li2);
}
/// <summary>
/// Implements the operator !=.
/// </summary>
/// <param name="li1">The li1.</param>
/// <param name="li2">The li2.</param>
/// <returns>The result of the operator.</returns>
public static bool operator !=(LocationInfo li1, LocationInfo li2)
{
return !(li1 == li2);
}
/// <summary>
/// Determines whether the specified <see cref="System.Object"/> is equal to this instance.
/// </summary>
/// <param name="obj">The <see cref="System.Object"/> to compare with this instance.</param>
/// <returns>
/// <c>true</c> if the specified <see cref="System.Object"/> is equal to this instance; otherwise, <c>false</c>.
/// </returns>
/// <exception cref="T:System.NullReferenceException">
/// The <paramref name="obj"/> parameter is null.
/// </exception>
public override bool Equals(object obj)
{
LocationInfo li = obj as LocationInfo;
if (obj == null)
{
return false;
}
return this.locationTypeName == li.locationTypeName;
}
/// <summary>
/// Returns a hash code for this instance.
/// </summary>
/// <returns>
/// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
/// </returns>
public override int GetHashCode()
{
//return this.locationTypeName.GetHashCode();
return this.ToDBValue();
}
/// <summary>
/// Returns a <see cref="System.String"/> that represents this instance.
/// </summary>
/// <returns>
/// A <see cref="System.String"/> that represents this instance.
/// </returns>
public override string ToString()
{
return this.locationTypeName;
}
}
}