문자열 앞에 $는 무엇을 의미합니까?
나는 그대로 문자열을 사용하려고했지만 실수로 $
대신 입력 했습니다 @
.
그러나 컴파일러는 오류와 컴파일을 제공하지 않았습니다.
나는 그것이 무엇인지 그리고 무엇을 알고 싶어합니다. 나는 그것을 찾았지만 아무것도 찾을 수 없었다.
그러나 쓸 수 없기 때문에 축약 형 문자열과 다릅니다.
string str = $"text\";
$
C #에서 문자열 앞에 무엇을 의미하는지 아는 사람이 있습니까?
string str = $"text";
Visual Studio 2015 CTP를 사용하고 있습니다.
$
String.Format
C # 6의 새로운 기능인 문자열 보간법의 줄임말 이며 사용됩니다 string.Format()
.
다른 값을 참조하여 문자열을 작성하는 데 사용될 때 자체적으로 제공됩니다. 이전에는 다음과 같이 작성해야했습니다.
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = string.Format("{0},{1},{2}", anInt, aBool, aString);
이제는
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = $"{anInt},{aBool},{aString}";
잘 알려져 있지 않은 다른 형태의 문자열 보간법도 있습니다 $@
(두 심볼의 순서가 중요합니다). @""
문자열 의 기능을 혼합 하여 문자열 전체를 $""
보지 않고도 문자열 보간을 지원할 \\
수 있습니다. 따라서 다음 두 줄 :
var someDir = "a";
Console.WriteLine($@"c:\{someDir}\b\c");
출력합니다 :
c:\a\b\c
보간 된 문자열을 만듭니다 .
에서 MSDN
문자열을 구성하는 데 사용됩니다. 보간 된 문자열 표현식은 표현식을 포함하는 템플릿 문자열처럼 보입니다. 보간 된 문자열 표현식은 포함 된 표현식을 표현식 결과의 ToString 표현으로 대체하여 문자열을 작성합니다.
예 :
var name = "Sam";
var msg = $"hello, {name}";
Console.WriteLine(msg); // hello, Sam
보간 된 문자열 내에서 표현식을 사용할 수 있습니다
var msg = $"hello, {name.ToLower()}";
Console.WriteLine(msg); // hello, sam
그것에 대한 좋은 점은 매개 변수의 순서에 대해 걱정할 필요가 없다는 것입니다 String.Format
.
var s = String.Format("{0},{1},{2}...{88}",p0,p1,..,p88);
이제 일부 매개 변수를 제거하려면 모든 카운트를 업데이트해야합니다. 더 이상 그렇지 않습니다.
형식화에string.format
문화 정보를 지정하려는 경우 좋은 옛날 정보 는 여전히 관련이 있습니다 .
그것은이다 보간 문자열 . 문자열 리터럴을 사용할 수있는 곳이면 보간 된 문자열을 사용할 수 있습니다. 프로그램을 실행할 때 보간 된 문자열 리터럴을 사용하여 코드를 실행할 때 코드는 보간 식을 평가하여 새 문자열 리터럴을 계산합니다. 이 계산은 보간 된 문자열이있는 코드가 실행될 때마다 발생합니다.
var message = $"Sample, {text}";
이 예제는 모든 문자열 보간 값이 계산 된 문자열 값을 생성합니다. 최종 결과이며 유형 문자열이 있습니다. 이중 중괄호 (“{{“ and “}}”)
는 모두 단일 중괄호 로 변환됩니다.
만약,
string text = "One";
그런 다음 message
"Sample, One"을 포함합니다.
Console.WriteLine(message); // Sample, One
예
public class Person
{
public String firstName { get; set; }
public String lastName { get; set; }
}
// Instantiate Person
var person = new Person { firstName = "Albert", lastName = "Einstein" };
// We can print fullname of the above person as follows
Console.WriteLine("Full name - " + person.firstName + " " + person.lastName);
Console.WriteLine("Full name - {0} {1}", person.firstName, person.lastName);
Console.WriteLine($"Full name - {person.firstName} {person.lastName}");
산출
Full name - Albert Einstein
Full name - Albert Einstein
Full name - Albert Einstein
참조 -MSDN
멋진 기능. 나는 이것이 왜 사람들에게 명백하지 않은 경우 이것이 string.format보다 나은지 강조하고 싶습니다.
매개 변수와 일치시키기 위해 order string.format을 "{0} {1} {2}"(으)로 말하는 사람을 읽었습니다. string.format에서 "{0} {1} {2}"을 (를) 주문하지 않아도됩니다. "{2} {0} {1}"을 (를) 수행 할 수도 있습니다. 그러나 20과 같은 매개 변수가 많은 경우 문자열을 "{0} {1} {2} ... {19}"로 시퀀싱하려고합니다. 뒤섞인 엉망이라면 매개 변수를 정렬하기가 어렵습니다.
$를 사용하면 매개 변수를 세지 않고 인라인으로 매개 변수를 추가 할 수 있습니다. 이를 통해 코드를 훨씬 쉽게 읽고 관리 할 수 있습니다.
$의 단점은 문자열에서 매개 변수를 쉽게 반복 할 수 없으므로 입력해야한다는 것입니다. 예를 들어 System.Environment.NewLine을 입력하는 데 지치면 string.format ( "... {0} ... {0} ... {0}", System.Environment.NewLine), 그러나 $로 반복해야합니다. $ "{0}"은 (는) "0"을 반환하므로 $ "{0}"을 (를) 수행하고이를 string.format에 전달할 수 없습니다.
부수적으로, 나는 또 다른 중복 된 tpoic에서 주석을 읽었습니다. 나는 언급 할 수 없으므로 여기에 있습니다. 그는 말했다
string msg = n + " sheep, " + m + " chickens";
둘 이상의 문자열 객체를 만듭니다. 이것은 사실이 아닙니다. 이 작업을 한 줄로 수행하면 하나의 문자열 만 만들어 문자열 캐시에 배치됩니다.
1) string + string + string + string;
2) string.format()
3) stringBuilder.ToString()
4) $""
모두 문자열을 반환하고 캐시에 하나의 값만 만듭니다.
반면에 :
string+= string2;
string+= string2;
string+= string2;
string+= string2;
4 ";"가 있으므로 캐시에 4 개의 다른 값을 작성합니다.
따라서 다음과 같은 코드를 작성하는 것이 더 쉬울 것이지만 Carlos Muñoz가 수정 한대로 5 개의 보간 문자열을 작성합니다.
string msg = $"Hello this is {myName}, " +
$"My phone number {myPhone}, " +
$"My email {myEmail}, " +
$"My address {myAddress}, and " +
$"My preference {myPreference}.";
이렇게하면 코드를 매우 쉽게 읽을 수있는 동안 캐시에 단일 문자열이 생성됩니다. 나는 성능에 대해 확신하지 못하지만 MS가 아직 수행하지 않은 경우 MS가 최적화 할 것이라고 확신합니다.
두 가지를 결합 할 수도 있습니다 (약간 이상해 보이지만).
// simple interpolated verbatim string
WriteLine($@"Path ""C:\Windows\{file}"" not found.");
string.Format보다 편리하며 여기에서도 인텔리전스를 사용할 수 있습니다.
그리고 여기 내 테스트 방법이 있습니다 :
[TestMethod]
public void StringMethodsTest_DollarSign()
{
string name = "Forrest";
string surname = "Gump";
int year = 3;
string sDollarSign = $"My name is {name} {surname} and once I run more than {year} years.";
string expectedResult = "My name is Forrest Gump and once I run more than 3 years.";
Assert.AreEqual(expectedResult, sDollarSign);
}
문자열 보간을 나타냅니다.
문자열 평가에 컴파일 시간 보호 기능을 추가하기 때문에 사용자를 보호합니다.
더 이상 예외가 발생하지 않습니다. string.Format("{0}{1}",secondParamIsMissing)
다음 예는 보간 문자열을 사용하여 string.Format()
청결과 가독성에 관한 다양한 장점을 강조 합니다. 또한 호출되는 {}
것과 마찬가지로 다른 함수 인수와 마찬가지로 코드 내의 코드 가 평가됨을 보여줍니다 string.Format()
.
using System;
public class Example
{
public static void Main()
{
var name = "Horace";
var age = 34;
// replaces {name} with the value of name, "Horace"
var s1 = $"He asked, \"Is your name {name}?\", but didn't wait for a reply.";
Console.WriteLine(s1);
// as age is an integer, we can use ":D3" to denote that
// it should have leading zeroes and be 3 characters long
// see https://docs.microsoft.com/en-us/dotnet/standard/base-types/how-to-pad-a-number-with-leading-zeros
//
// (age == 1 ? "" : "s") uses the ternary operator to
// decide the value used in the placeholder, the same
// as if it had been placed as an argument of string.Format
//
// finally, it shows that you can actually have quoted strings within strings
// e.g. $"outer { "inner" } string"
var s2 = $"{name} is {age:D3} year{(age == 1 ? "" : "s")} old.";
Console.WriteLine(s2);
}
}
// The example displays the following output:
// He asked, "Is your name Horace?", but didn't wait for a reply.
// Horace is 034 years old.
$ 구문은 좋지만 단점이 있습니다.
문자열 템플릿과 같은 것이 필요한 경우 클래스 수준에서 필드로 선언됩니다.
그런 다음 동일한 수준에서 변수를 선언해야합니다 ... 실제로는 시원하지 않습니다.
문자열을 사용하는 것이 훨씬 좋습니다.
class Example1_StringFormat {
string template = $"{0} - {1}";
public string FormatExample1() {
string some1 = "someone";
return string.Format(template, some1, "inplacesomethingelse");
}
public string FormatExample2() {
string some2 = "someoneelse";
string thing2 = "somethingelse";
return string.Format(template, some2, thing2);
}
}
글로벌 사용은 실제로 좋지 않으며 그 외에는 글로벌에서도 작동하지 않습니다.
static class Example2_Format {
//must have declaration in same scope
static string some = "";
static string thing = "";
static string template = $"{some} - {thing}";
//This returns " - " and not "someone - something" as you would maybe
//expect
public static string FormatExample1() {
some = "someone";
thing = "something";
return template;
}
//This returns " - " and not "someoneelse- somethingelse" as you would
//maybe expect
public static string FormatExample2() {
some = "someoneelse";
thing = "somethingelse";
return template;
}
}
작동 방식을 모르겠지만 값을 탭하는 데 사용할 수도 있습니다!
예 :
Console.WriteLine($"I can tab like {"this !", 5}.");
물론 "this!"를 대체 할 수 있습니다. 탭을 변경할 수있는 것처럼 변수 나 의미있는 것을 사용하십시오.
문자열의 $ 기호는 C #의 기능인 보간 문자열을 정의하기위한 것입니다. 문자열을 보간하는 것은 보간 된 표현식을 포함 할 수있는 "진정한 문자열"입니다.
자세한 내용은 답변 및 예의 출처입니다. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
참고 URL : https://stackoverflow.com/questions/31014869/what-does-mean-before-a-string
'Programing' 카테고리의 다른 글
팬더 수 (고유 한) (0) | 2020.04.15 |
---|---|
iPhone 숫자 패드에 "완료"버튼을 표시하는 방법 (0) | 2020.04.15 |
터미널 출력의 라인 수 (0) | 2020.04.15 |
\ r과 \ n의 차이점은 무엇입니까? (0) | 2020.04.15 |
CSS 파일에서 Google Web Font를 가져 오는 방법은 무엇입니까? (0) | 2020.04.15 |