Что-то подобное, если я ввожу строку «Console.WriteLine», она вернется -> «System.Console.WriteLine»C# - Получить функцию пространства имен принадлежит?
Я предполагаю, что есть какой-то способ через Reflection.
Что-то подобное, если я ввожу строку «Console.WriteLine», она вернется -> «System.Console.WriteLine»C# - Получить функцию пространства имен принадлежит?
Я предполагаю, что есть какой-то способ через Reflection.
Ну, проблема немного сложнее, чем вы думаете.
Прежде всего, довольно легко сканировать все типы во всех загруженных сборках. Так, например, чтобы найти именно то, что вы ищете, вот что вы можете сделать:
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
в верхней части файла определяют, какой из них будет найден. С помощью этого кода нет такой вещи, поэтому вам нужно будет закодировать любые правила для себя.
Теперь, лучший вопрос (от меня к вам) - это то, на что вы намерены использовать этот код. Возможно, есть лучший способ помочь вам, если вы скажете нам, что является конечной целью.
Google the name; вы обычно найдете документацию MSDN, которая дает вам пространство имен.
Используя отражение, вам нужно будет прокручивать каждый класс в каждом пространстве имен в каждой сборке, ища совпадения.
Удивительно, несмотря на то, что я очень скупился на множество деталей, это в значительной степени * точно *, что я хотел, спасибо :) – Blam
Тогда не забудьте отметить это как принятый ответ :) –