2017-02-08 9 views
1
System.Type type = Type.GetType("something"); 

System.Type не имеет имени пользователя 'IsNamespace', поэтому как определить, относится ли этот тип к пространству имен?C# System.Type - пространство имен?

Тип "something" не известен во время компиляции.

+0

Вы можете использовать Type.IsNamespace (объект); см. https://msdn.microsoft.com/en-us/library/bb383760.aspx?f=255&MSPPError=-2147217396 – meganaut

+3

@meganaut thats для asp.net ajax. –

ответ

3

Он не имеет ни один из членов «IsNamespace», потому что пространство имен не может быть представлена ​​Type объектов. Следующая строка не может скомпилировать:

typeof(System.Linq); 

Так если вы едите Type объекта, вы знаете его не пространство имен. С такой же строкой GetType следует бросить, если это просто пространство имен.

3

Type s не относятся к пространствам имен - они относятся к типам. Типы имеют свойство, которое описывает, в каком пространстве имен они находятся.

Вы можете перечислить все типы в сборке/приложении домена и собрать/кешировать уникальные пространства имен.

HashSet<string> allNamespaces = new HashSet<string>(
    AppDomain.CurrentDomain.GetAssemblies() 
     .SelectMany(s => s.GetTypes()) 
     .Select(t => t.Namespace) 
    ); 

bool isNamespace = allNamespaces.Contains("foo"); 
+0

Мое намерение состояло в том, чтобы взять произвольную строку, как это было бы предусмотрено в коде, и определить, какой из них. символы должны быть заменены на «+», чтобы Type.GetType() корректно работал на нем. Поэтому моя логика заключалась в том, что синтаксический анализ слева направо, я мог бы начать замену в «+», когда я нашел первое пространство без имен. – bitwise

+0

@bitwise, о чем вы говорите? –

+0

Я мог бы просто поменять местами каждый. с «+» до тех пор, пока он не будет работать, но это будет мудрый шаг. Ваше решение не будет улучшением. – bitwise

Смежные вопросы