2008-09-18 6 views
21

저는 CodeDom을 사용하여 사용자 값을 기반으로 동적 코드를 생성하고 있습니다. 이러한 값 중 하나는 내가 생성하는 클래스 이름이 무엇인지 제어합니다. 정규 표현식을 사용하여 유효한 클래스 이름에 대한 언어 규칙을 기반으로 이름을 소독 할 수 있다는 것을 알고 있지만 클래스 이름을 확인 및/또는 소독하기위한 프레임 워크에 특정 메서드가 내장되어 있는지 알고 싶습니다.클래스 이름의 유효성을 검사하는 .NET 함수가 있습니까?

답변

25

문자열 클래스 또는 변수에 대한 유효한 식별자인지 확인하는 쉬운 방법은 정적 방법

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

내 질문에 대한 답변을 찾았습니다. 전화 할 수 있습니다

CodeCompiler.ValidateIdentifiers(class1); 

여기서 class1은 해당 CodeDom 트리 및 그 아래의 모든 식별자를 확인하는 CodeObject입니다. 따라서 클래스 이름의 유효성을 검사하기 위해 ClassTypeDeclaration class1을 작성한 후에이 코드를 호출 할 수 있습니다. 또는 코드북을 빌드 한 다음이 코드를 호출하여 트리의 모든 식별자의 유효성을 검사 할 수 있습니다. 내가 필요한 것!

7

CSharpCodeProvider 클래스의 CreateValidIdentifier 메서드를 사용하십시오.

CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName"); 
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName); 

일부 입력에서 유효한 이름을 반환합니다. 이름을 확인하고 수정하지 않으려면 입력 및 출력을 비교하십시오. 유효한 입력을 변경하지 않으므로 출력은 동일합니다.

+4

를 호출하는 것입니다이 모든 그것이 예약과 충돌하는 경우 식별자의 이름을 변경하는 것입니다 않습니다 워드. 전달 된 값에 유효하지 않은 문자가있는 경우 유효한 식별자를 만들지 않습니다. 따라서이 방법이 유용하지만 새로운 코드 유형을 만들기 전에 모든 일이 필요하지는 않습니다. – Zach

1
public static bool IsReservedKeyWord(string identifier) 
     { 
      Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider(); 
      return csharpProvider.IsValidIdentifier(identifier); 
     }