枚举向后兼容性

时间:2014-03-09 15:56:58

标签: c# .net

我有枚举A,它在版本2枚举B和C中成为两个枚举。 有一个函数Ge​​tSpecificEnum(),它返回版本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);
}
}

2 个答案:

答案 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;
    }

如果您的枚举是旧枚举的拆分,则实际上不需要对代码进行更改。最后,我们正在处理整数。请注意,拆分枚举仍保留与之前相同的整数值。然后,您可以转换整数值并将其发送出去。