2013-03-07 2 views
2

я нашел метод проверки имени класса с использованием CodeDOM от SE, и я использовал его:Как проверить имя пространства имен в CodeDOM?

System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)

по этой ссылке: Is there a .NET function to validate a class name?

Но имена классов не позволяют ". (Период OEM), где пространства имен могут быть примерно такими: System.Linq например, который позволяет «.». Прежде чем перейти к таким параметрам, как Regex или циклы для проверки имен пространства имен, мне нравится знать, существуют ли какие-либо методы в .NET для этой задачи.

EDIT:

Фактический сценарий, у меня есть с. Пользователь может указать имя класса и пространство имен из текстовых полей. Для этого класса и пространства имен я дам сгенерированный код. Если пользователь ввел SomeClass в качестве имени класса и Some.Namespace для пространства имен, то сгенерированный код будет:

namespace Some.Namespace 
{ 
    class SomeClass{} 
} 

За то, что мне нужно подтверждать эти два имени пользователя ввод.

+0

Вы посмотрели на второй метод в классе «CodeGenerator»: 'ValidateIdentifiers()'? – svick

+0

Да @svick, но этот параметр запрашивает весь мой CodeObject. то есть 'ValidateIdentifiers (CodeObject e)'. Но мне нужно только проверить строку, как я тестирую имя_файла .... – Irshad

+0

Вы всегда можете создать для этого временный объект: 'CodeGenerator.ValidateIdentifiers (новое пространство имен CodeNamespace (namespaceName))'. – svick

ответ

5

Я пробовал другой подход, и он работает для меня.

public bool IsValidNamespace(string input) 
     { 
      //Split the string from '.' and check each part for validity 
      string[] strArray = input.Split('.'); 
      foreach (string item in strArray) 
      {     
       if (! CodeGenerator.IsValidLanguageIndependentIdentifier(item)) 
        return false; 
      } 
      return true; 
     } 
0

Для этого вы можете использовать CodeGenerator.ValidateIdentifiers().

Если вы не хотите, чтобы проверить все дерево, только одно имя пространства имен, вы можете создать временный объект для этого:

CodeGenerator.ValidateIdentifiers(new CodeNamespace(namespaceName)); 

За документацию, если идентификатор не является действительным, метод выкинет ArgumentException.

+0

Я также сделал индивидуальный подход к этому. Разделите пространство имен на. и проверьте каждый из них на 'IsValidLanguageIndependentIdentifier (строковое значение)'. И это работает. – Irshad