C# 为什么在Roslyn中,ITypeSymber.ToString()为多维数组返回错误的值?
我的目标是通过Roslyn的C# 为什么在Roslyn中,ITypeSymber.ToString()为多维数组返回错误的值?,c#,roslyn,C#,Roslyn,我的目标是通过Roslyn的ITypeSymbol获得TypeSyntax。 我是这样做的: SF.ParseTypeName(myTypeSymbol.ToString()) 在我们在输入中获得多维数组的myTypeSymbol之前,这种方法工作得很好。 示例: 假设myExpression的类型为int[,] 在这种情况下 SemanticModel.GetTypeInfo(myExpression).Type.ToString(); 返回int[*,*]而不是int[,] 因此SF.P
ITypeSymbol
获得TypeSyntax
。我是这样做的:
SF.ParseTypeName(myTypeSymbol.ToString())
在我们在输入中获得多维数组的myTypeSymbol
之前,这种方法工作得很好。示例:
假设
myExpression
的类型为int[,]
在这种情况下
SemanticModel.GetTypeInfo(myExpression).Type.ToString();
返回int[*,*]
而不是int[,]
因此
SF.ParseTypeName(“int[*,*])
返回错误的TypeSyntax
在结果中,
TypeSyntax
rank.size
被解析为PrefixUnaryExpressionSyntax
,而不是省略的ArraySizeExpressionSyntax
所以问题是为什么
myTypeSymbol.ToString()
返回int[*,*]
?对于多维数组,是否有任何解决方法来获得正确的TypeSyntax
?如果您想要控制符号的字符串表示(例如,特定于编程语言),您需要使用SymbolDisplayFormat
并将其提供给“symbol.ToDisplayString()”。谢谢您的回答。我通过ParseTypeName(myTypeSymbol.ToDisplayString(新的SymbolDisplayFormat(typeQualificationStyle:SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces))实现了所需的结果。