Ну, проблема несколько сложнее, чем вы думаете.
Прежде всего, довольно просто сканировать все типы во всех загруженных сборках.Так, например, чтобы найти именно то, что вы ищете, вот что вы можете сделать:
void Main()
{
String input = "Console.WriteLine";
var fullNames =
(from asm in AppDomain.CurrentDomain.GetAssemblies()
from type in asm.GetTypes()
from member in type.GetMembers()
let memberWithName = type.Name + "." + member.Name
where memberWithName == input
select type.FullName + "." + member.Name).Distinct();
fullNames.Dump();
}
Обратите внимание, приведенный выше код написан для запуска через LINQPad , LINQ-запрос есть то, что вы ищете.
Однако есть небольшая проблема.
Что, если сборка не загружена (пока)?Вы не найдете это тогда.Кроме того, в приведенном выше запросе цель вызова Distinct
заключается в том, чтобы консоль имела ряд перегрузок.Конечно, для вашей цели все они будут производить одно и то же имя, отсюда и вызов Distinct
.
Также обратите внимание, что если я создам свой собственный класс с именем Console
с помощью метода WriteLine
,Приведенный выше код также обнаружил бы, что между ними нет никакого способа различить.
Когда в вашем коде есть такие сценарии (т. е. несколько классов), директивы using
в верхней части файла диктуюткоторый будет найден.С этим кодом такой вещи нет, поэтому вам нужно было бы самому кодировать какие-либо правила для этого.
Теперь, лучший вопрос (от меня к вам) - для чего вы собираетесь использовать этот код.Возможно, есть лучший способ помочь вам, если вы сообщите нам, какова конечная цель.