FormattableString 取代特定区域字符串

用户头像
喵叔
关注
发布于: 2020 年 04 月 22 日

有些软件系统是针对全球来开发的,因此一些字符串需要根据不同地区不同语言做出特定的处理。如果针对不同地区不同用语言分别编写字符串处理方法的话代码量是巨大的。那么这个时候我们可以用到内插字符串深层的特性,C# 会把内插字符串的结果隐式的转换成 string 或者 FormattableString 。

例如下面这个例子,内插字符串的结果将是 string 类型:

string message = $"我的名字叫 {name} ";

下面这段代码内插字符串的结果将会被转换为 FormattableString 对象:

FormattableString message= $"我的名字叫 {name} ";

当我们声明隐式类型的局部变量,并将内插字符串的结果赋值给它时,实际上内插字符串的结果会隐式转换为 string 类型。编译器会根据应该输出的信息所具有的运行期类型来产生不同的程序码。用来创建字符串的程序码部分会根据执行该程序的计算机所在位置来生成该区域的字符串格式。开发人员也可以利用编译器类型判定机制来编写生成 stritg 或 FormttableString 的代码。

public static string ToGerman(FormattableString fts)
{
return string.Format(null,System.Globalization("de-de"),fts.Format.fts.GetArguments());
}

上述代码我们定义一个将字符串转换为德语格式的方法,它接受一个类型为 FormattableString 的参数,返回一个字符串。我么们可以在内插字符串结果上直接调用这个方法。当我们编写类似的方法时需要有两点需要注意:

  1. 不要给这些方法编写以 string 类型作为参数的重载,因为如果存在 string 参数类型的重载编译器会优先选择以 string 类型为参数的方法;

  2. 不能将这些方法设计为可扩展的方法,因为编译器在判断应该生成 string 还是 FormattableString 的时候会考虑字符串位于运算符的哪一侧,如果位于左侧就生成 string 。



发布于: 2020 年 04 月 22 日 阅读数: 36
用户头像

喵叔

关注

还未添加个人签名 2020.01.14 加入

还未添加个人简介

评论

发布
暂无评论
FormattableString 取代特定区域字符串