2012-01-17 93 views
0

我只是想制作一个小的自定义单位转换库。我有一个XML的所有单位和换算值文件Xml在编译时枚举

<unit name="m"> 
    <multiply>1</multiply> 
</unit> 
<unit name="mm"> 
    <multiply>1E-3</multiply> 
</unit> 

,并在编译的时候,我想有他们转换(可能打错字了)到一个枚举其他项目使用

public enum Units{m, mm, ...}; 

这可能吗?有没有更好的方法来完成同样的事情?

+2

听起来像东西t4或另一个构建工具可以做... – 2012-01-17 22:36:42

+0

在编译时你没有得到任何枚举。最好你得到MSIL程序集或最坏的编译时错误消息。您是否试图从XML构建C#代码? – 2012-01-17 22:36:56

+0

第一步是获得一个正常的C#方法来生成一个包含你的代码的字符串,一旦你完成了将它转换成T4模板不应该太难。 – 2012-01-17 22:39:17

回答

1

对于这种特殊情况,普通C#代码可能会更好,因为单元数量相对较少。当您将类型混淆时,您将获得IntelliSence编辑值并清除编译时错误。调试几层转换(XML - > CS - >一些内部结构)很有意思,并给你提供有用的见解,但除非这个项目纯粹用于娱乐/学习,否则它不是很有效率。另一个好处是让别人更容易理解代码的能力。

请注意,对于与基本单元存在非线性差异的单元,您的XML看起来可能不必要复杂 - 易于用代码表示,实现一次性XML数据更有趣。

+0

有趣。我搜索了创建单位转换库的方式,他们似乎都以某种方式使用xml文件(例如[here](http://www.codeproject.com/Articles/12520/Thunder-Measurement-Unit-Conversion) -framework))。你能否提供另一种方法?我也注意到你以前的评论,看看[这里](http://stackoverflow.com/questions/8902428/type-parameter-constraints-no-generics-or-nearest-offer)。 – john 2012-02-03 22:51:51

2

看看T4模板。他们在Visual Studio中自动创建任何文本文件(* .cs,* .txt,* .html,* .xml,* .vb等)。 有了这样的模板,你可以读取你的xml文件并生成一个包含你的枚举的* .cs文件。

请参阅MSDN上的Code Generation and T4 Text Templates

+0

这个问题的最佳解决方案+1 – 2014-04-03 11:38:16