如何要求 Roslyn 为我生成标识符名称?

How to ask Roslyn to generate an identifier name for me?

正如标题所说,我如何要求 Roslyn 为我生成一个标识符,类似于模式匹配代码修复程序或生成方法的做法?

原来 Roslyn 内部有一个内部 class 可以执行此操作,但它所做的远远超出我的需要。

相反,我只是使用语义模型在我的块跨度开始时获取可见符号列表,将我的标识符命名为与我的类型相同(只是以小写字母开头)并开始在结束直到我得到一些不可见的东西:

        var symbols = new HashSet<string>(semanticModel.LookupSymbols(bes.SpanStart).Select(s => s.Name));

        var baseIdentifierName = baseType is PredefinedTypeSyntax pts ? pts.Keyword.ValueText : throw new InvalidOperationException();
        if (isArray && !baseIdentifierName.EndsWith("s"))
            baseIdentifierName += "s";
        if (char.IsUpper(baseIdentifierName[0]))
            baseIdentifierName = $"{char.ToLower(baseIdentifierName[0])}{baseIdentifierName.Substring(1)}";

        var identifierName = baseIdentifierName;
        var index = 0;
        while (symbols.Contains(identifierName))
            identifierName = baseIdentifierName + ++index;