source

C#의 문자열 앞에 있는 @는 무엇입니까?

factcode 2023. 4. 14. 22:11
반응형

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

반응형