Microsoft.CSharp.CSharpCodeGenerator
에는 정확히 IsKeyword(string)
메서드가 있습니다. 그러나 클래스는 내부 클래스이므로 액세스를 위해 리플렉션을 사용해야하며 이후 버전의 .NET 프레임 워크에서 사용할 수 있다고 보장 할 수는 없습니다. IsKeyword
은 다른 버전의 C#을 처리하지 않습니다.
public 메서드 System.CodeDom.Compiler.ICodeGenerator.IsValidIdentifier(string)
은 키워드도 거부합니다. 단점은이 메소드가 다른 유효성 검사도 수행하므로 다른 키워드가 아닌 문자열도 거부된다는 것입니다.
업데이트 : 특정 문자열이 키워드 인 경우 당신은 단지 유효한 식별자를 생산보다는 결정해야하는 경우, 당신은 ICodeGenerator.CreateValidIdentifier(string)
사용할 수 있습니다. 이 메서드는 앞에 두 개의 밑줄이있는 문자열을 처리합니다.에는 하나의 밑줄이 앞에 붙습니다. 키워드에 대해서도 마찬가지입니다. ICodeGenerator.CreateEscapedIdentifier(string)
은 @
부호가있는 문자열 앞에 붙습니다.
첫 번째 밑줄이 두 개인 시작 기호는 구현 (예 : C# 컴파일러 및 관련 코드 생성기 등) 용으로 예약되어 있으므로 코드에서 이러한 식별자를 피하는 것이 일반적으로 좋습니다.
업데이트 2 :ICodeGenerator.CreateEscapedIdentifier
이상 ICodeGenerator.CreateValidIdentifier
을 선호하는 이유는 __x
및 @__x
은 본질적으로 같은 식별자 점이다. 다음은 컴파일되지 않습니다 :
이
int __x = 10;
int @__x = 20;
경우 컴파일러가 생성하는 것과 __x
식별자를 사용하고 사용자가 CreateEscapedIdentifier
의 호출에 결과 @__x
을 사용, 컴파일 오류가 발생합니다. CreateValidIdentifier
을 사용하면 사용자 지정 식별자가 ___x
(3 개의 밑줄)로 바뀌므로이 상황이 방지됩니다.
의심이를 참조하십시오. 이유 중 하나는 컨텍스트 별 키워드가있을 수 있습니다. –
... 문맥에 대해 신경 쓰지 않는다면 문자열이 키워드인지 여부는 꽤 간단한 테스트입니다. 그러한 테스트를 유지하려는 노력이 사소한 것 이상인 지 의심 스럽습니다. 심지어 MS는 C#의 버전을 매우 빠르게 제조 할 수 없습니다. –