2011-04-30 5 views
4

string를 선언하거나 사용하는 코드에서 나는 보통 다음과 같이 선언합니다.@ 전에 문자열을 사용하는 것이 더 나은가요?

대신 :

string randomString = "C:\\Random\\RandomFolder\\ThisFile.xml"; 

그 중 유일하게 사용하는 것이 더 낫습니다. \\을 할 필요가 없기 때문에 @ 접두어를 사용합니다.

답변

8

@ 기호 문자열이 verbatim string literal입니다 컴파일러에 지시, 따라서 당신은 문자를 벗어날 필요가 없습니다 . 백 슬래시뿐만 아니라 모든 종류의 이스케이프 시퀀스는 컴파일러에서 처리하지 않습니다.

"더 나은지"아닌지 대답하는 것은 매우 어려운 질문입니다. 이것은 순전히 문체적인 선택입니다. 어떤 사람들은 모든 문자를 이스케이프하지 않고 문자열 리터럴을 사용할 때 문자열 내용이 가능한이라고 주장 할 수 있습니다. 다른 사람들은 일관성을 선호 할 수 있는데, 일반적으로 이스케이프해야하는 문자가 포함 된 모든 문자열은 이스케이프 처리해야합니다. 이렇게하면 코드의 오류를 한 눈에 쉽게 알아볼 수 있습니다. (그것은 가치가 무엇인지, 나는 후자의 캠프에 속합니다. 내 모든 경로가 \\ 있습니다.)

말했다되고 그건

는, 당신이 그렇지 않으면 사방 탈출 할 거라고하는 정규 표현식, 매우 편리 입니다. 그리고 그들은 일반 문자열처럼 보이지 않기 때문에 혼란의 위험이 적습니다.

+0

동의어, 슬래시 문자가 경로 구분 기호로 사용되는 UNIX 경로 용으로 설계된 C#의 하위 집합이므로, 백 슬래시 문자는 이스케이프 문자로 사용됩니다. Windows 탐색기가 URL에 UNIX 경로를 사용하는 IE에 "신비하게 묶여"있다는 점을 감안할 때 Microsoft에서 경로 구분 기호를 사용하는 이유는 이상한 질문입니다. Windows에서 경로 및 디버깅을 사용할 때만이 litteral을 사용합니다. 그 외에는 일반적으로 경로가 하드 코드되지 않아야한다는 데 동의합니다. 그래, 언제든지 백 슬래시가 많은 문자열이 필요합니다. – awiebe

5

많은 백 슬래시가있는 Windows 경로 이름 만있는 것은 아닙니다. 예를 들어, @ -strings은 모든 것을 이중으로 이스케이프하지 않아도되기 때문에 정규 표현식에 매우 유용합니다.

여러 줄에 걸쳐있을 수도 있으므로 코드에 여러 줄 문자열이 있어야하는 경우에는 훨씬 편리합니다.

1

는 정규식 간단

@"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$"; 

여러 줄 문자열을 만듭니다

string s = @"testing 
some 

string with multiple 
lines"; 
1

백 슬래시 문자를 명시 적으로 일치시키는 정규 표현식에 특히 유용합니다. 이것은 C# strings 구문과 regex 구문 모두에서 특수 문자이므로 "이중 이스케이프"가 필요합니다. 예 : @의 표기법을 사용하여

string regex = "\\\\.*\\.jpg" 

같은 표현이 더 깔끔 할 것 "

string regex = @"\\.*\.jpg" 
0

"와 @ ""두 문자열 리터럴은 먼저 일반 문자이지만 후자는 그대로 문자열 리터럴

관련 문제