C # 6 (Roslyn CTP6)에서 문자열 보간을위한 로캘 지정
C # 6의 문자열 보간을 사용하면 다음과 같이 작성할 수 있습니다.
decimal m = 42.0m;
string x = $"The value is {m}";
그러나 문자열 형식화의 매우 일반적인 사용 사례는 값 형식화에 사용되는 로케일을 지정하는 것입니다. InvariantCulture
위의 서식 지정 작업 에 사용해야한다고 가정 해 보겠습니다. 그 구문은 무엇입니까?
이 토론 은 내가 이것을 할 수 있어야 함을 제안합니다.
string x = INV($"The value is {m}");
INV는 다음과 같이 정의됩니다.
public static string INV(IFormattable formattable)
{
return formattable.ToString(null, System.Globalization.CultureInfo.InvariantCulture);
}
그러나 이것은 작동하지 않습니다. 컴파일되지만 시작시 cmd.exe에서 내 프로그램이 중단 된 상태로 유지됩니다. 마치 klr.exe가 호출되고 있다고 가정하면 중단됩니다 (컴파일러 버그?).
이것은 VS15 CTP 6의 ASP.NET 5 콘솔 프로젝트입니다.
당신이 가진 것은 작동해야합니다. 올바른 구문입니다. 제안 된 "INV"도우미 메서드와 동일한 효과를 갖는 "System.FormattableString"추상 클래스에는 편리한 메서드도 있습니다.
using static System.FormattableString;
...
string x = Invariant($"The value is {m}");
나는 마침내 이것을 알아 냈다. 결과적으로 컴파일러 기능은 System.FormattableString
, 및 두 가지 유형에 의존합니다 System.Runtime.CompilerServices.FormattableStringFactory
. 내 프로젝트에서는 사용할 수 없었습니다. 아직 CTP6의 모든 플랫폼에 적용되지 않았을 수 있습니다.
이로 인해 컴파일러가 설명한대로 중단 된 것 같습니다. CoreCLR 코드에서이 두 가지 유형의 코드를 가져 와서 프로젝트에 추가하면 코드가 예상대로 작동합니다.
이것은 InterpolationTests에 대한 코드 주석을 통해 파악되었습니다 . 사용 가능한 소스에 대한 만세 :-)
'UFO ET IT' 카테고리의 다른 글
std :: chrono를 사용하여 C ++에서 날짜 및 시간 출력 (0) | 2020.12.25 |
---|---|
Python Selenium을 사용하여 텍스트 상자 (입력)에서 값을 찾아 삽입하는 방법은 무엇입니까? (0) | 2020.12.25 |
Android 테스트 : UIAutomator 대 Espresso (0) | 2020.12.25 |
Angular 2 : 경로 매개 변수를 검색 할 때 switchMap을 사용하는 이유는 무엇입니까? (0) | 2020.12.25 |
Java에서 호출되는 오버로드 된 메서드 (0) | 2020.12.25 |