有没有办法让Enum指向另一个Enum?以下是需求和细节:
目前:
public void Init(string name, MyObject.Types type)
{
// does Init
}
重构要求:
public void Init(string name, MyManager.Types type)
{
// does Init
}
有关如何在不破坏当前结构的情况下执行此操作的任何建议?感谢。
答案 0 :(得分:2)
你可以让一个enum
使用另一个的值,但是你不能使它们可以互换(没有强制转换)。
public class MyManager
{
public enum Types
{
Type1 = com.abcd.data.MyObject.Types.Type1,
Type2 = com.abcd.data.MyObject.Types.Type2,
Type3 = com.abcd.data.MyObject.Types.Type3
}
}
这将允许你在两个enum
之间进行投射,并获得相同成员名称的相同值,但你仍然需要施放。
答案 1 :(得分:0)
我不明白为什么移动枚举会破坏任何东西。您应该只能将枚举移动到com.abcd.Types
,并确保MyObject
代码文件包含com.abcd
命名空间的using指令。如果你真的想在MyManager
中加入枚举,那么MyObject
必须引用MyManager.Types
而不是Types
。
尝试重构时,您遇到了哪些具体问题?
答案 2 :(得分:0)
我有两个建议。
1)将MyObject.Types枚举移动到MyObject和MyManager都引用的单独项目中。
2)在MyManager项目中创建一个与MyObject项目中的枚举匹配的枚举。然后你可以有某种映射方法:
public void Init(string name, MyManager.Types type)
{
MyObject.Types t = type.ToMyObjectType();
}
internal static class Extensions
{
public static MyObject.Types ToMyObjectType(this MyManager.Types t)
{
//do mapping
}
}
我不建议使用第二种方法,因为如果MyObject中的枚举发生变化,您还需要记住更新此代码。