C#使用T4生成枚举

时间:2010-10-12 14:35:52

标签: c# t4

在我的项目中,我想使用T4生成我的枚举。为了测试这个,我用一个简单的表单创建了一个测试项目。在这个项目中,我添加了一个.tt文件并将我的代码放入该文件中。

一切正常,但我有点失望。我认为当项目执行时,T4会生成枚举。因此,枚举始终是最新的。但事实并非如此,对吧?如果要更新枚举,则必须手动执行此操作并重建解决方案。我的问题是,我在这一个方面是否正确?或者我错过了什么。

其次,我为什么要用T4创建一个枚举?我的意思是如果枚举更改我必须重建我的解决方案。

编辑: 我从数据库表中获取我的枚举值。该表只有2个字段:Id和Description

4 个答案:

答案 0 :(得分:2)

说实话,我不相信这是值得的。您仍然需要返回并更新代码以处理任何新值。您可以做的最好的事情是确保您的switch语句有一个默认大小写。

switch (enumValue)
{
    // ...
    default:
        throw new InvalidOperationException(
            "The enum value " + enumValue + " is unhandled."
        );
}

答案 1 :(得分:2)

您的表格不是实际的enum等价物

如果你的表改变了它的价值,现在成为enum真的不是一个好的竞争者吗? C#枚举往往是静态定义的,除非有合理的原因,否则不会改变。当他们这样做时,代码必须采用此更改来使用其他值。

因此,如果您的应用程序能够更改表的内容,那么这只是一个常用的表。

但是如果你想要一个通用的T4模板实际上确实使用XML文档生成枚举,而且我已经付出了一些努力来编写这样的模板。 this blog post中记录了所有内容。包括模板的代码。

答案 2 :(得分:0)

这是一篇关于另一个方向的文章(从SQL视图生成一个c#enum)

http://www.olegsych.com/2008/07/t4-template-for-generating-sql-view-from-csharp-enumeration/

答案 3 :(得分:0)

PLINQO能够很容易地从一个表生成枚举,但是你会遇到LINQ-TO-SQL。如果你只需要生成的枚举就足够好了!