gpt4 book ai didi

C#6.0 字符串插值本地化

转载 作者:IT王子 更新时间:2023-10-29 03:43:50 27 4
gpt4 key购买 nike

C#6.0 有一个 string interpolation - 格式化字符串的一个很好的功能,例如:

 var name = "John";
WriteLine($"My name is {name}");

示例转换为

 var name = "John";
WriteLine(String.Format("My name is {0}", name));

从本地化的角度来看,存储这样的字符串要好得多:

"My name is {name} {middlename} {surname}" 

比 String.Format 表示法:

"My name is {0} {1} {2}"

.NET本地化如何使用字符串插值?有没有办法将 $"..."放入资源文件?或者字符串应该像“...{name}”一样存储并以某种方式动态插入?

附言这个问题不是关于“如何制作 string.FormatIt 扩展名”(有很多这样的库,所以答案等)。这个问题是关于“本地化”上下文中“字符串插值”的 Roslyn 扩展(两者都是 MS .NET 词汇表中的术语),或者像 Dylan 提议的动态用法。

最佳答案

内插字符串将大括号之间的 block 计算为 C# 表达式(例如 {expression}{1 + 1}{person.FirstName }).

这意味着内插字符串中的表达式必须引用当前上下文中的名称。

例如这个语句将不会编译:

var nameFormat = $"My name is {name}"; // Cannot use *name*
// before it is declared
var name = "Fred";
WriteLine(nameFormat);

类似地:

class Program
{
const string interpolated = $"{firstName}"; // Name *firstName* does not exist
// in the current context
static void Main(string[] args)
{
var firstName = "fred";
Console.WriteLine(interpolated);
Console.ReadKey();
}
}

回答你的问题:

框架目前没有提供在运行时评估内插字符串的机制。因此,您不能开箱即用地存储字符串和动态插值。

存在处理字符串运行时插值的库。

关于C#6.0 字符串插值本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068194/

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