5

だから、それは可能だと思いますが、それをまとめるためのチョップがありません。ルックアップ テーブルがあります (ID フィールドと名前フィールドを含む)。ルックアップと同期している列挙型があります。私が望むのは、SQL テーブルのリストを作成し、コンパイル中/コンパイル前に roslyn に列挙型を作成させることです。このようにして、列挙型が常に同期していることを知り、それは私の皿からもう1つ離れています。

誰かが私に道を教えてくれませんか、それともなぜそれが悪い考えなのか教えてくれませんか? 解決策は実際には多くのコードではないように感じます...

ありがとう!

4

3 に答える 3

8

これは、roslyn で列挙型を作成する方法です。

class Program
{
    static void Main(string[] args)
    {
        var member1 = Syntax.EnumMemberDeclaration(
            identifier: Syntax.Identifier("Member1")
            );

        var declaration = Syntax.EnumDeclaration(
            identifier: Syntax.Identifier("MyEnum"),
            modifiers: Syntax.TokenList(Syntax.Token(SyntaxKind.PublicKeyword)),
            members: Syntax.SeparatedList(member1)
            );

        Console.WriteLine(declaration.Format());
        Console.ReadLine();
    }
}

これは次を返します:

public enum MyEnum
{
    Member1
}

あなたの質問に対して、これがあなたが本当に必要としているものかどうかはわかりません。

まず、プリコンパイル時にこれを行うための組み込み機能はまだないと思うので、コンソール exe を作成してプリビルド イベントで呼び出す必要があります。

したがって、この時点では、これらのテーブルが頻繁に変更されない限り、すべてのビルドではなく、コード生成を介して手動でこれを行うことをお勧めします。

この場合、roslyn を使用する必要はありません。任意のコード生成ソフトウェアで吐き出すか、独自のロールを作成することができます...

于 2011-12-05T15:37:41.087 に答える
0

6 年前に Sebastian が提供した回答は、以前は機能していた可能性がありますが、機能しなくなりました。2017 年 12 月 18 日と同じことを達成するためのサンプル コードの新しいセット

EnumMemberDeclarationSyntax member1 = EnumMemberDeclaration(identifier: Identifier("Member1"));

var members =new SyntaxNodeOrToken[]{member1};

var declaration = EnumDeclaration(
            identifier: Identifier("MyEnum")).WithMembers(
            members: SeparatedList< EnumMemberDeclarationSyntax>(members));
于 2017-12-18T01:18:02.823 に答える