2017-07-26 13 views
1

私はコードジェネレータを作成しています。私が持っている問題を単純化するために、複数の宣言修飾子を持つクラスをどのように生成できますか?Roslyn複数の宣言修飾子を持つクラスを作成する方法

クラスジェネレータは、単一の宣言モディファイ

this._syntaxGenerator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp); 
var classNode = this._syntaxGenerator.ClassDeclaration(classOptions.Name, null, 
         classOptions.InternalAccessModifier, DeclarationModifiers.Sealed) 
        .NormalizeWhitespace(); 

を追加するためのコンストラクタを持っている私はそれを行うことができますどのように複数の宣言修飾子と密封された部分クラスか何かを作りたいと言いますか?

+0

既存の修飾子を使用し、 'WithIs ** 'を使って新しいものを作り直してみてください。これは 'var modifiers = DeclarationModifiers.Sealed.WithIsAbstract(true).WithIsStatic(true);のようになります。 'その後、あなたは 'SyntaxGenerator.ClassDeclaration'に渡す必要があります –

+0

ああ、私は配列から渡すことができると思っていました。テキストから解析しているので、すべてを代わりにトークンリスト。あなたが答えとして投稿した場合、正しいとマークします。 –

+0

'DeclarationModifiers'は演算子をオーバーライドします。これにより、修飾子を' Expression'を使ってテキストで合計することができます。しかし、私はそれがより明確になるとは確信していません。 –

答えて

1

既存の修飾子を使用して、WithIs**を使用して新しく作成してみます。それは次のようになります。

var modifiers = DeclarationModifiers.Sealed.WithIsAbstract(true).WithIsStatic(true); 

その後あなただけのあなたが使用することができますSyntaxGenerator.ClassDeclaration

1

にそれを渡す必要があります「|」を演算子を使用して宣言修飾子を組み合わせる:

DeclarationModifiers.Sealed | DeclarationModifiers.Abstract

フラグenumと似ています。

+0

ありがとう、これを行うテキストを解析するこれは私が実行したいものを得るためのより簡単な方法です –

関連する問題