Visual Studio 2015 및 IFormat Provider(CA1305)의 문자열 보간
Visual Studio 2015의 새로운 문자열 보간 스타일은 다음과 같습니다.
Dim s = $"Hello {name}"
그러나 이것을 사용하면 코드 분석에서 CA1305를 중단한다고 표시됩니다. IFormatProvider 지정
옛날에는 이렇게 했습니다.
Dim s = String.Format(Globalization.CultureInfo.InvariantCulture, "Hello {0}", name)
하지만 새로운 스타일로 어떻게 할 수 있을까요?
에 대한 해결책을 찾고 있다는 점을 언급해야 합니다.넷 4.5.2(용).Net 4.6 dcastro가 정답입니다.)
당신은 사용할 것입니다.System.FormattableString
또는System.IFormattable
클래스:
IFormattable ifs = (IFormattable)$"Hello, {name}";
System.FormattableString fss = $"Hello, {name}";
// pass null to use the format as it was used upon initialization above.
string ifresult = ifs.ToString(null, CultureInfo.InvariantCulture);
string fsresult = fss.ToString(CultureInfo.InvariantCulture);
프레임워크 4.6에 대해 컴파일해야 합니다.IFormattable
그리고.FormattableString
이전 버전에는 없는 클래스입니다.이전 버전을 대상으로 하는 경우에는NET 프레임워크 오류를 트리거하지 않고는 보간 구문을 사용할 수 없습니다.
약간의 해킹을 적용하지 않는 한(존 스키트의 요지에서 4.6 RTM에 대해 컴파일하도록 조정되어 내 계정으로 포크됨).다음을 포함하는 클래스 파일을 프로젝트에 추가하기만 하면 됩니다.
갱신하다
이제 프로젝트에 동일한 기능을 제공하는 Nuget 패키지도 사용할 수 있습니다(이것을 @habakuk에 알려주셔서 감사합니다).
install-package StringInterpolationBridge
또는 제품에 어셈블리를 추가하지 않고 동일한 작업을 수행하려면 다음 코드를 프로젝트에 추가합니다.
namespace System.Runtime.CompilerServices
{
internal class FormattableStringFactory
{
public static FormattableString Create(string messageFormat, params object[] args)
{
return new FormattableString(messageFormat, args);
}
}
}
namespace System
{
internal class FormattableString : IFormattable
{
private readonly string messageFormat;
private readonly object[] args;
public FormattableString(string messageFormat, object[] args)
{
this.messageFormat = messageFormat;
this.args = args;
}
public override string ToString()
{
return string.Format(messageFormat, args);
}
public string ToString(string format, IFormatProvider formatProvider)
{
return string.Format(formatProvider, format ?? messageFormat, args);
}
public string ToString(IFormatProvider formatProvider)
{
return string.Format(formatProvider, messageFormat, args);
}
}
}
참조:
만약 당신이 목표로 한다면요.NET Framework 4.6, 문자열 보간이 암시적으로 변환 가능하다는 사실을 활용할 수 있습니다.FormattableString
:
Thomas Levesque의 C# 6 문자열 보간 사용자 정의에서
이 기능의 덜 알려진 측면은 보간된 문자열이 다음 중 하나로 처리될 수 있다는 것입니다.
String
또는 로서IFormattable
문맥에 따라
static string Invariant(FormattableString formattable)
{
return formattable.ToString(CultureInfo.InvariantCulture);
}
string text = Invariant($"{p.Name} was born on {p.DateOfBirth:D}");
Microsoft는 문자열 보간을 보다 쉽게 사용하고 CA1305: Specify IFormatProvider를 준수할 수 있도록 지원했습니다.
C# 6 이상을 사용하는 경우 지침에 액세스할 수 있습니다.
추가로, 정적 방법.FormattableString.Invariant
에 사용할 수 있습니다.NET 표준 1.3, .NET Core 1.0 및 .NET Framework 4.6 이상.이 두 가지를 함께 사용하면 다음 작업을 수행할 수 있습니다.
using static System.FormattableString;
string name = Invariant($"Hello {name}");
그러나 현재 문화를 통해 보간을 수행하는 것이 목표라면, 동반 정적 방법입니다.FormattableString.CurrentCulture
에 제안되어 있습니다.NET Core 3.0(현재, Preview 5):
using static System.FormattableString;
string name = CurrentCulture($"Hello {name}");
제시하우잉이 답변에서 제시한 코드를 다루는 누겟 패키지를 찾았습니다.
Nuget 패키지 'StringInterpolationBridge'(소스)는 모든 프로젝트에 이 코드를 추가합니다.
언급URL : https://stackoverflow.com/questions/32076823/string-interpolation-in-visual-studio-2015-and-iformatprovider-ca1305
'programing' 카테고리의 다른 글
엔티티 프레임워크에서 저장 프로시저를 호출하는 중 오류 발생 (0) | 2023.05.12 |
---|---|
커밋 ID가 주어지면 현재 분기에 커밋이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.12 |
안드로이드 앱에 어떤 이클립스 버전을 사용해야 합니까? (0) | 2023.05.07 |
Angular 2 서비스에서 관찰 가능한 항목 생성 및 반환 (0) | 2023.05.07 |
그것을 해제하는 명령이 있습니까? (0) | 2023.05.07 |