2017-02-21 1 views
1

그래서 Roslyn SyntaxFactory를 사용하여 C# 코드를 생성합니다.Roslyn C# 구문 팩토리를 사용할 때 변수 이름을 이스케이프 처리하는 방법은 무엇입니까?

IdentifierName(string)을 사용하여 변수 이름을 생성 할 때 변수 이름을 이스케이프 처리하는 방법이 있습니까?

요구 사항 :

  • 유니 코드를 지원하지만이 같은 입력에 대한
  • 항상 같은 결과 (가역적 인 경우 ASCII가
  • 그것은 좋은 것 충분할 수 있다고 생각하면 그것은 좋은 것 "a"는 것입니다 항상 "A") 각 입력 ("A가?"에 대한
  • 고유 결과 -! "는"> "A_"이 같은 동일 할 수 없습니다 -> "A_")는
  • 여러 하나의 사람에게 1 개 특수 문자로 변환 할 수
+0

어떤 종류의 탈출을 원하십니까? – svick

+0

문자열을 이스케이프 처리하여 변수 이름으로 사용할 수있게하려고합니다. 예 : 'as-.d, as.d, as-.d '는 어떤 형태로든 변수 이름으로 사용할 수 있어야합니다. – ditoslav

+0

왜 필요로 하는가에 따라 달라집니다 ... 나중에 변수를 참조 할 때만 필요하다면, 변수 선언에 [annotation] (http://stackoverflow.com/questions/27260603/how-to-add-custom-syntax-annotation-to-syntaxnode)을 추가하고 고유 한 변수 이름을 사용하십시오 – m0sa

답변

1

여기에 유효한 C# 식별자가 필요하므로 API 문서에서 알 수 있듯이 Roslyn은 이스케이프 메커니즘을 제공하지 않습니다. 따라서 문자열 변환을 정의하여 원하는 결과를 얻을 수 있습니다.

이 작업을 수행하는 방법은 다른 작업이 이미 수행 한 방법을 살펴 보는 것입니다. 항상 &을 사용하여 소개되는 HTML 항목을 살펴보십시오. 그것들은 언제나 쉽게 구별 될 수 있으며 문자 그대로 &을 인코딩하는 방법이있어서 렌더링 가능한 문자 집합을 제한하지 않습니다. 또는 C# 문자열을 사용하여 문자열 구분 기호 및 기타 특수 문자를 \을 사용하여 문자열에 포함 할 수있는 방법을 고려하십시오.

인코딩 할 식별자가 아닌 문자 중 하나를 나타내는 시퀀스의 '마커'가되도록 C# 식별자에서 유효한 문자를 선택해야하며 해당 문자도 나타낼 수있는 방법이 필요합니다 . 그런 다음 각 인코딩 된 문자에 대한 마커 뒤의 매핑 테이블을 만듭니다. 모든 유니 코드를 수행하려면 가장 쉬운 방법은 유니 코드 코드 포인트 번호를 사용하는 것입니다. 결과 식별자는 읽기 쉽지 않을 수도 있지만 유스 케이스에서는 중요하지 않을 수도 있습니다.

적합한 시스템을 완성했으면이를 구현하는 문자열 변환 함수를 작성하는 것이 매우 간단해야합니다.

관련 문제