Ответ 1
вы можете сделать это, используя класс-помощник, который я написал:
NamespaceDeclarationSyntax namespaceDeclarationSyntax = null;
if (!SyntaxNodeHelper.TryGetParentSyntax(classDeclarationSyntax, out namespaceDeclarationSyntax))
{
return; // or whatever you want to do in this scenario
}
var namespaceName = namespaceDeclarationSyntax.Name.ToString();
var fullClassName = namespaceName + "." + classDeclarationSyntax.Identifier.ToString();
и помощник:
static class SyntaxNodeHelper
{
public static bool TryGetParentSyntax<T>(SyntaxNode syntaxNode, out T result)
where T : SyntaxNode
{
// set defaults
result = null;
if (syntaxNode == null)
{
return false;
}
try
{
syntaxNode = syntaxNode.Parent;
if (syntaxNode == null)
{
return false;
}
if (syntaxNode.GetType() == typeof (T))
{
result = syntaxNode as T;
return true;
}
return TryGetParentSyntax<T>(syntaxNode, out result);
}
catch
{
return false;
}
}
}
Здесь нет ничего сложного, что происходит здесь... имеет смысл, что пространство имен будет "вверх" в дереве синтаксиса (потому что класс содержится в пространстве имен), поэтому вам просто нужно перемещать "вверх" дерево синтаксиса, пока не найдете пространство имен и добавьте его в идентификатор класса ClassDeclarationSyntax
.