C#의 문자열 앞에 있는 @는 무엇입니까?
이것은 입니다.C#(혹은 VB.net)에 관한 NET 질문입니다만, 다음의 선언의 차이를 파악하려고 합니다.
string hello = "hello";
대.
string hello_alias = @"hello";
콘솔에서 인쇄해도 아무런 차이가 없습니다. 길이 속성은 동일합니다.
문자열은 문자 그대로 스트링 리터럴로 마크됩니다.일반적으로 이스케이프 시퀀스로 해석되는 문자열 내의 모든 것은 무시됩니다.
★★★★★★★★★★★★★★★★★."C:\\Users\\Rich"
is is is is is와 @"C:\Users\Rich"
단, 이중 따옴표에는 이스케이프 시퀀스가 필요합니다.큰따옴표를 피하려면 큰따옴표를 두 개 연속으로 넣어야 합니다.를 들면, 「 」입니다.@""""
"
문자 그대로의 스트링입니다.탈출은 적용되지 않는다는 뜻입니다.예:
string verbatim = @"foo\bar";
string regular = "foo\\bar";
서 ★★★★verbatim
★★★★★★★★★★★★★★★★★」regular
은은내내내가가가
또한 여러 줄의 콘텐츠를 사용할 수 있어 SQL에 매우 유용합니다.
string select = @"
SELECT Foo
FROM Bar
WHERE Name='Baz'";
문자 그대로 문자열 리터럴에 필요한 이스케이프 비트는 큰따옴표(")를 얻는 것입니다.이것을 2배로 하는 것으로써, 다음과 같이 됩니다.
string verbatim = @"He said, ""Would you like some coffee?"" and left.";
string regular = "He said, \"Would you like some coffee?\" and left.";
'@'는 다른 의미도 있습니다.변수 선언 앞에 두면 예약된 키워드를 변수 이름으로 사용할 수 있습니다.
예를 들어 다음과 같습니다.
string @class = "something";
int @object = 1;
나는 이것에 대한 합법적인 용도를 한 두 개밖에 찾지 못했다.주로 ASP에서.다음과 같은 작업을 수행하는 경우 NET MVC:
<%= Html.ActionLink("Text", "Action", "Controller", null, new { @class = "some_css_class" })%>
그러면 다음과 같은 HTML 링크가 생성됩니다.
<a href="/Controller/Action" class="some_css_class">Text</a>
그렇지 않으면 예약 키워드는 아니지만 대문자 'C'는 HTML 표준을 따르지 않아 올바르게 표시되지 않는 'Class'를 사용해야 합니다.
VB도 명시적으로 요구했으므로 이 문자 그대로의 문자열 구문은 VB에는 존재하지 않고 C#에만 존재함을 덧붙입니다.VB에서는 모든 문자열이 글자 그대로입니다(C# 문자열과는 달리 줄 바꿈을 포함할 수 없다는 점을 제외합니다).
Dim path = "C:\My\Path"
Dim message = "She said, ""Hello, beautiful world."""
이스케이프 시퀀스는 VB에는 존재하지 않습니다(C# 문자 그대로의 스트링과 같이 따옴표 문자가 중복되는 경우는 제외).그 때문에, 몇개의 것이 복잡해집니다.예를 들어 다음 코드를 VB에 쓰려면 연결(또는 문자열을 구성하는 다른 방법)을 사용해야 합니다.
string x = "Foo\nbar";
VB에서는, 다음과 같이 기술됩니다.
Dim x = "Foo" & Environment.NewLine & "bar"
)&
VB를 사용하다 +
동등하게 사용할 수 있습니다.)
http://msdn.microsoft.com/en-us/library/aa691090.aspx
C#은 표준 문자열 리터럴과 문자 그대로 문자열 리터럴의 두 가지 형식을 지원합니다.
일반 문자열 리터럴은 "hello"와 같이 큰따옴표로 둘러싸인0 이상의 문자로 구성됩니다.단순 이스케이프 시퀀스(탭 문자의 \t 등)와 16진수 및 Unicode 이스케이프 시퀀스를 모두 포함할 수 있습니다.
문자 그대로의 문자열 리터럴은, @ 문자 뒤에 쌍따옴표가 붙은 문자, 0 이상의 문자, 및 닫는 쌍따옴표로 구성됩니다.간단한 예는 @"hello" 입니다.문자 그대로의 문자열 리터럴에서는 구분자 사이의 문자가 문자 그대로 해석됩니다.단, Quote-escape-sequence는 예외입니다.특히 단순한 이스케이프 시퀀스 및 16진수 및 Unicode 이스케이프 시퀀스는 문자 그대로 스트링 리터럴로 처리되지 않습니다.문자 그대로의 문자열 리터럴은, 복수의 행에 걸칠 수 있습니다.
이것은 문자 그대로의 문자열로 이스케이프 규칙을 변경합니다.현재 이스케이프되는 유일한 문자는 ", 에스케이프된 " 입니다.이는 파일 경로 및 regex에 특히 유용합니다.
var path = @"c:\some\location";
var tsql = @"SELECT *
FROM FOO
WHERE Bar = 1";
var escaped = @"a "" b";
기타
MSDN에서 복사:
컴파일 시에 말 그대로 이스케이프 시퀀스가 모두 동일한 일반 문자열로 변환됩니다.따라서 디버거 워치창에서 문자 그대로를 표시하면 소스 코드의 문자 그대로가 아니라 컴파일러에 의해 추가된 이스케이프 문자가 표시됩니다.예를 들어, 문자 그대로의 문자열은
@"C:\files.txt"
워치 창에 로 표시됩니다."C:\\files.txt"
.
puting a의 경우@
문자열 앞에서는 특수 코드나 이스케이프 문자를 사용하지 않고도 백슬래시 또는 더블슬래시 등의 특수 문자를 사용할 수 있습니다.
다음과 같이 쓸 수 있습니다.
string path = @"C:\My path\";
다음 대신:
string path = "C:\\My path\\";
설명은 간단하다.문자열을 나타내려면"string\"
, 컴파일러의 필요성"string\\"
왜냐면\
이스케이프 캐릭터입니다.사용하시는 경우@"string\"
대신, 당신은 잊어버릴 수 있다.\\
.
언급URL : https://stackoverflow.com/questions/556133/whats-the-in-front-of-a-string-in-c
'source' 카테고리의 다른 글
#pragma 마크의 의미는 무엇입니까?#pragma 마크가 필요한 이유는 무엇입니까? (0) | 2023.04.14 |
---|---|
Objective-C 코드를 유닛 테스트하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.14 |
Excel의 큰 숫자에 대한 10진수에서 2진수로 변환 (0) | 2023.04.14 |
OS X에서 'sed' 명령과 'find' 명령을 함께 사용할 때 오류 발생: "invalid code" (0) | 2023.04.14 |
SQL Server Express Edition에서 작업을 생성하는 방법 (0) | 2023.04.14 |