2012-01-17 9 views
0

私は小さなカスタム変換ライブラリを作成しようとしています。私はXmlをコンパイル時に列挙する

public enum Units{m, mm, ...}; 
を使用する他のプロジェクトのための列挙にコンパイル時に、私は彼らが(おそらく間違った単語)に変換したいと思い、
<unit name="m"> 
    <multiply>1</multiply> 
</unit> 
<unit name="mm"> 
    <multiply>1E-3</multiply> 
</unit> 

XMLファイル内のすべてのユニットと変換値を持っており、

これは可能ですか?同じことを達成する良い方法はありますか?

+2

何かt4や他のビルドツールのようなサウンドは... –

+0

コンパイル時にはenumsを取得しません。あなたはMSILアセンブリを入手するか、最悪のコンパイル時のエラーメッセージを得ます。 XMLからC#コードを作成しようとしていますか? –

+0

最初のステップでは、コードを含む文字列を生成する通常のC#メソッドを取得します。それをT4テンプレートに変換すると、それほど難しくはありません。 –

答えて

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

2

T4テンプレートをご覧ください。 Visual Studioでテキストファイル(* .cs、* .txt、* .html、* .xml、* .vbなど)を自動的に作成します。 このようなテンプレートを使用すると、XMLファイルを読み込み、列挙型を含む* .csファイルを生成します。

MSDNのCode Generation and T4 Text Templatesを参照してください。

+0

この問題の大きな解決策+1 –

関連する問題