2017-05-03 9 views
0

プリミティブ型の場合、Roslyn SyntaxGenerator.IdentifierNameを使用して識別子を作成しようとすると、Identifier.Textにエスケープが追加されます。SyntaxGenerator.IdentifierNameが最小限修飾されたプリミティブ型をエスケープする

var generator = SyntaxGenerator.GetGenerator(document); 

// genericTypeArg.Identifier.ValueText = "@double" 
var genericTypeArg = generator.IdentifierName("double"); 

// generic.Identifier.ValueText = "IEnumerable<@double>" 
var generic = generator.GenericName("IEnumerable", genericTypeArg); 

エスケープされていないタイプ識別子の作成方法はありますか。

編集:

これは有効なテスト方法ですか?

var typeExp = typeSymbol.SpecialType == SpecialType.None 
    ? _generator.IdentifierName(typeSymbol.ToDisplayString(symbolDisplayFormat)); 
    : _generator.TypeExpression(typeSymbol.SpecialType) 
var generic = _generator.GenericName("IEnumerable", typeExp); 

答えて

1

IdentifierName()はまさに識別子のこと–名前です。

あなたはdoubleという名前の識別子を要求しました。そのために有効な構文を示しました。

あなたはSpecialType overloadが必要になります。

generator.TypeExpression(SpecialType.System_Double) 
+0

事は、私がITypeSymbolから型情報を取得していますし、私がしなければ 'generator.GenericName(「IEnumerableを」、typeSymbol)'とtypeSymbolがあることを起こるということですプリミティブ(例えば二重)である場合、生成されるジェネリックは 'IEnumerable 'になります。これをクリーンアップして 'double 'を返すために、generator.GenericName(" IEnumerable "、generator.IdentifierName(typeSymbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat)))'を実行しようとしましたが、これは組み込みのキーワードをエスケープします。 – LGreenberger

+0

どうやってこれを書いて、印刷された型が組み込み型のキーワードか、最小限の修飾型のカスタム型を使用するようにしますか?ありがとう! – LGreenberger

+0

元の投稿を編集して、私の提案したやり方がうまくいくかどうか尋ねました。 – LGreenberger

関連する問題