这样做的另一种方式,可能是有意义的:在你的程序中定义枚举和外部API的值映射到枚举在私人方法。换句话说,不要在对象模型中的任何地方暴露外部API的类型。例如:
public enum MyEnum { First, Second, Third };
public class MyApiWrapper
{
private Dictionary<int, int> ExternalToInternal = new Dictionary<int, int>();
private Dictionary<int, int> InternalToExternal = new Dictionary<int, int>();
public MyApiWrapper(List<int> externalApiEnumValues)
{
foreach (int i = 0; i < externalApiEnumValues.Count; i++)
{
ExternalToInternal[externalApiEnumValues[i]] = i;
InternalToExternal[i] = externalApiEnumValues[i];
}
}
// obviously, your real method for calling the external API
// will do more than this.
public void CallApi()
{
CallExternalApi(_EnumValue);
}
private MyEnum _ExternalEnumValue;
public MyEnum EnumValue
{
get { return ExternalToInternal[_ExternalEnumValue]; }
set { _ExternalEnumValue = InternalToExternal[value]; }
}
}
只要所有访问API,通过这个类(一个希望你已经封装在一个类外部API访问),您可以自由使用MyEnum
无处不在您的应用程序中没有做担心其他程序员如何处理这些值。
请改用字符串? – 2010-01-14 18:10:12
或使整数代码DO匹配。为什么这不可能? – Aaronaught 2010-01-14 18:26:21
在编译时无法对字符串进行类型检查 ... 我有一些我知道的整数代码,所以是的,我可以将枚举硬编码为这些值。但是API可能会在未来改变它们的价值,我可能会硬编码并在发生问题时处理问题,但这是一个有趣的编程问题,我希望有一个有趣的答案。 – 2010-01-14 19:07:04