为枚举分配(非)常量值

时间:2010-11-01 10:20:33

标签: c# enums constants variable-assignment

我正在尝试为这样的枚举分配短片:;

public enum ValueRepresentation : short
{
   ApplicationEntity = short.Parse("AE"),
   AgeString = short.Parse("AS")
}

然而,这显然不起作用。但有没有快速解决方案使这项工作?

干杯

3 个答案:

答案 0 :(得分:5)

没有。枚举值始终是编译时常量。如果您希望它们是通过运行代码创建的值,则必须自动生成源代码。

(无论如何解析“AS”究竟如何工作?)

当然,另一种选择是不使用枚举。它们可能不是您尝试做的最合适的解决方案。

答案 1 :(得分:1)

正如乔恩所说,这不会起作用,而自动生成可能就是你所需要的。

如果您有“AE”,“AS”等这些值的列表,请查看t4模板(Visula Studio的一部分),编写一个简单的模板来循环遍历列表并非常容易吐出正确的枚举代码。

MSDN文档位于:http://msdn.microsoft.com/en-us/library/bb126445.aspx

我还发现Oleg SYch的博客很有帮助:http://www.olegsych.com/2007/12/text-template-transformation-toolkit/

如果可能的话,我也建议使用VS2010,它对t4有很好的支持,但是如果没有,它们在VS2008下仍能正常工作。

答案 2 :(得分:0)

如果您希望枚举具有短值,请以通常的方式使用关联值声明枚举,并将枚举转换为枚举的短或短:

        public enum ValueRepresentation
    {
        AE =1,
        AS = 2
    }

    private short AsShort(ValueRepresentation value)
    {
        return (short)value;
    }
    private ValueRepresentation ShortAsValue(short number)
    {
        return (ValueRepresentation)number;
    }