C# узнать тип объекта в методе
Есть код
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Update update = new Update();
var rr = update.GetType();
Assembly assembly = Assembly.GetExecutingAssembly();
// Получаем все типы из сборки
Type[] types = assembly.GetTypes();
// Ищем тип по имени
string typeName = "update";
Type? type = types.FirstOrDefault(t => t.FullName?.Contains(typeName) == true);
}
как можно узнать тип объекта в проекте по имени, через рефлексию доступа нет к переменным внутри метода, через Microsoft.CodeAnalysis пробовал так
var calls = root.DescendantNodes()
.OfType<InvocationExpressionSyntax>()
.Where(x => x.Expression is MemberAccessExpressionSyntax memberAccess && memberAccess.Expression is IdentifierNameSyntax identifier && !identifier.Identifier.Text.StartsWith("System") && !identifier.Identifier.Text.StartsWith("Microsoft"))
.Select(x => ((IdentifierNameSyntax)((MemberAccessExpressionSyntax)x.Expression).Expression).Identifier.Text)
.ToImmutableArray();
var variables_ = root.DescendantNodes()
.OfType<VariableDeclaratorSyntax>()
.Where(x => x.Identifier.Text == "userID")
.Select(x => x.Initializer.Value)
.OfType<MemberAccessExpressionSyntax>()
.Where(x => x.Expression is InvocationExpressionSyntax invocation && calls.Contains(invocation.Expression.ToString()))
.Select(x => x.Name.Identifier.Text)
.ToImmutableArray();
здесь для примера искал по названию userID так как это переменная и объект не сторонней сборки, но результата не получил
Источник: Stack Overflow на русском