2013-03-07 7 views
2
내가 SE에서 된 CodeDom 사용하여 클래스 이름 검증 방법을 발견하고 나는 그것을 사용

:이 링크를 통해CodeDOM에서 네임 스페이스 이름의 유효성을 검사하는 방법은 무엇입니까?

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

을 : '.'Is there a .NET function to validate a class name?

그러나, 클래스 이름은 허용하지 않습니다 (OEM 기간) 네임 스페이스는 다음과 같을 수 있습니다. System.Linq 예를 들어 '.'허용. Regex 또는 네임 스페이스 이름을 확인하는 루프와 같은 옵션을 사용하기 전에이 작업을 위해 .NET에 메서드가 있는지 여부를 알고 싶습니다.

편집 :

실제 시나리오는 다음과 같습니다. 사용자는 텍스트 상자에서 클래스 이름과 네임 스페이스를 지정할 수 있습니다. 해당 클래스 이름과 네임 스페이스에 대해 생성 된 코드를 제공합니다. 사용자가 네임 스페이스의 클래스 이름과 Some.Namespace로 SomeClass를 입력 한 경우 다음 생성 된 코드는 다음과 같습니다 내가 그 두 이름을 사용자 유입을 검증 할 필요가 들어

namespace Some.Namespace 
{ 
    class SomeClass{} 
} 

합니다.

+0

'CodeGenerator' 클래스에서 두 번째 방법을 살펴 보았습니다 : ValidateIdentifiers()? – svick

+0

예 @svick,하지만 매개 변수는 내 전체 CodeObject를 요청합니다. 즉 ValidateIdentifiers (CodeObject e)입니다. 하지만 클래스 이름을 테스트하는 것만으로 문자열을 테스트하면됩니다 .... – Irshad

+0

'CodeGenerator.ValidateIdentifiers (new 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