gpt4 book ai didi

c# - String、FormattableString、IFormattable 之间的区别

转载 作者:IT王子 更新时间:2023-10-29 04:06:15 27 4
gpt4 key购买 nike

FormattableString 已在 C# 6.0 中引入。因为我们可以使用 string 对象使用相同的字符串格式,所以为什么需要使用 FormattableStringIFormattable。三者有什么区别?

我的代码

        var name = "Pravin";
var s = $"Hello, {name}";
System.IFormattable s1 = $"Hello, {name}";
System.FormattableString s2 = $"Hello, {name}";

最重要的是产生相同的结果。即 'Hello Pravin'。

如果有人对此有深入的了解,我能得到更详细的答案吗?

最佳答案

FormattableString 是 .NET 4.6 中的一种新类型,只有当您尝试使用它时,编译器才会使用它。换句话说,内插字符串文字的类型通常是 string - 使用 string.Format 构建 - 但可以是 FormattableString (通过 FormattableStringFactory) 如果你要求的话。

FormattableString 包含将传递给 string.Format 的格式字符串(例如 "Hello, {0}")和为了格式化它而传递的参数。至关重要的是,此信息是在格式化之前捕获的。

这允许您适本地调整格式 - 最常见的是在不变文化中执行它,通常使用 Invariant static method .

当您将内插字符串文字分配给 IFormattable 变量时,它也会使用 FormattableStringIFormattable.ToString(string, CultureInfo) implementation在这种情况下忽略第一个参数,这大概就是它使用显式接口(interface)实现的原因。

示例代码:

using System;
using System.Globalization;
using System.Threading;
using static System.FormattableString;

class Test
{
static void Main()
{
var uk = CultureInfo.CreateSpecificCulture("en-GB");
Thread.CurrentThread.CurrentCulture = uk;
var germany = CultureInfo.CreateSpecificCulture("de-DE");
string now = $"Default: it is now {DateTime.UtcNow}";
Console.WriteLine(now); // UK format
IFormattable x = $"Specific: It is now {DateTime.UtcNow}";
Console.WriteLine(x.ToString("ignored", germany));
FormattableString y = $"FormattableString: It is now {DateTime.UtcNow}";
Console.WriteLine(FormattableString.Invariant(y));
// Via using static
Console.WriteLine(Invariant($"It is now {DateTime.UtcNow}"));
}
}

示例结果:

Default: it is now 16/02/2016 07:16:21
Specific: It is now 16.02.2016 07:16:21
FormattableString: It is now 02/16/2016 07:16:21
It is now 02/16/2016 07:16:21

关于c# - String、FormattableString、IFormattable 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35425899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com