我有枚举A,它在版本2枚举B和C中成为两个枚举。 有一个函数GetSpecificEnum(),它返回版本1的枚举A,并且应该返回版本2及更高版本的枚举B和C.函数本身进行一些计算并返回符合我的场景的枚举。
我的问题是正确定义这个函数,它可以返回两个版本。 我总是可以创建两个函数,并以某种方式将计算作为私有重构方法,但我试图避免这种情况。
有办法吗?
public ?? GetSpecificEnum()
{
if(version == 1)
{
//do some stuff
return A.SomeValue;
}
else
{
// do some stuff
return KeyValuePair<B, C>(B.SomeValue, C.SomeValue);
}
}
答案 0 :(得分:3)
您可以使用系统类型Enum
作为GetSpecificEnum
的返回值。然后,您的代码必须检查返回的类型,并相应地处理它。
public enum A
{
ONE,TWO
};
public enum B
{
THREE,
FOUR
};
public Enum GetThing(int version)
{
return version == 1 ? (Enum)A.ONE : B.THREE;
}
public void DoThing()
{
Enum e = GetThing(1);
if (e is A)
{
// handle A
A _a = (A)e;
}
else
{
// handle B
}
}
答案 1 :(得分:0)
如果您是API /产品提供商,您可以这样做:
public enum OldEnum
{
One,
Two,
Three
}
public enum NewPart1
{
One,
Two
}
public enum NewPart2
{
Three
}
[Obsolete("This method is intended to by used be previous versions")]
public OldEnum GetEnum(someparameters here)
{
// Some processing here
return OldEnum.One;
}
public NewPart1 GetEnum(someparameters here)
{
// Do something here
return NewPart1.One;
}
public NewPart2 GetEnum(someparameters here)
{
// Do something here
return NewPart2.Three;
}
如果您的枚举是旧枚举的拆分,则实际上不需要对代码进行更改。最后,我们正在处理整数。请注意,拆分枚举仍保留与之前相同的整数值。然后,您可以转换整数值并将其发送出去。