UFO ET IT

C # 6 (Roslyn CTP6)에서 문자열 보간을위한 로캘 지정

ufoet 2020. 12. 25. 00:16
반응형

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에 대한 코드 주석을 통해 파악되었습니다 . 사용 가능한 소스에 대한 만세 :-)

참조 URL : https://stackoverflow.com/questions/29333390/specifying-locale-for-string-interpolation-in-c6-roslyn-ctp6

반응형