我使用Roslyn为某种数据访问层创建应该是语言无关的代码生成器。 它将使用元数据输出所需的代码。 期望返回代码的C#和VB.NET版本。
当前实现正在生成所需的输出,但可空类型格式不正确,输出包含额外的空格。
是否有一个选项可以确保SyntaxGenerator.NullableTypeExpression
生成的可空类型返回格式正确 - 没有空格 - 声明?
代码段
这是SyntaxGenerator.NullableTypeExpression
用于返回与属性类型对应的SyntaxNode的地方。
private SyntaxNode ToTypeExpression(Type type, bool nullable, SyntaxGenerator generator)
{
SyntaxNode baseType;
SyntaxNode propType;
SpecialType specialType = ToSpecialType(type);
if(specialType == SpecialType.None)
{
baseType = generator.IdentifierName(type.Name);
}
else
{
baseType = generator.TypeExpression(specialType);
}
if (nullable && type.IsValueType)
{
propType = generator.NullableTypeExpression(baseType);
}
else
{
propType = baseType;
}
return propType;
}
这是生成的VB.NET代码:
Public Property Salary As Integer?
Get
Return GetAttributeValue(Of Integer?)("salary").Value
End Get
Set(value As Integer?)
SetPropertyValue("Salary", "salary", value)
End Set
End Property
这是C#代码,注意空格:
public int ? Salary
{
get
{
return GetAttributeValue<int ? >("salary").Value;
}
set
{
SetPropertyValue("Salary", "salary", value);
}
}
答案 0 :(得分:0)
在此处使用Formatter.Format
作为建议:Generating well-formatted syntax with Roslyn,删除了不需要的空格。
string textOutput;
var sb = new StringBuilder();
var result = generator.CompilationUnit(declarations);
var formattedResult = Formatter.Format(result, workspace);
using (StringWriter writer = new StringWriter(sb))
{
formattedResult.WriteTo(writer);
textOutput = writer.ToString();
}