FormattableString 取代特定区域字符串

摘要:
有些软件系统是针对全球来开发的,因此一些字符串需要根据不同地区不同语言做出特定的处理。如果针对不同地区不同用语言分别编写字符串处理方法的话代码量是巨大的。那么这个时候我们可以用到内插字符串深层的特性,C# 会把内插字符串的结果隐式的转换成 string 或者 FormattableString 。例如下面这个例子,内插字符串的结果将是 string 类型:string message = $"我的名字叫 {name} ";1下面这段代码内插字符串的结果将会被转换为 Forma

有些软件系统是针对全球来开发的,因此一些字符串需要根据不同地区不同语言做出特定的处理。如果针对不同地区不同用语言分别编写字符串处理方法的话代码量是巨大的。那么这个时候我们可以用到内插字符串深层的特性,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 的参数,返回一个字符串。我么们可以在内插字符串结果上直接调用这个方法。当我们编写类似的方法时需要有两点需要注意:


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

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

免责声明:文章转载自《FormattableString 取代特定区域字符串》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#中String对象转换为Font对象的方法全局变量global的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【zz】Perl数字与字符串间的自动转换

http://developer.51cto.com/art/201007/211617.htm 本文和大家重点讨论一下Perl语言中Perl数字与字符串间的自动转换,这里从七个方面向大家介绍,相信通过过本文的学习你对Perl数字与字符串间的自动转换有一定的了解。 Perl数字与字符串间的自动转换 Perl会根据需要,在数字与字符串间进行自动转换: 1、...

hexdump——Linux系统的二进制文件查看工具

hexdump是Linux下的一个二进制文件查看工具,可以将二进制文件转换为ASCII、10进制、16进制或8进制进行查看。 首先我们准备一个测试用的文件test,十六进制如下: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D...

集合与函数

变量用来记录状态的变化。 可变类型与不可变类型:修改变量的值,ID值不变,则为可变数据类型,如果修改变量的值,ID变了,则该变量为不可变类型。 1.不可变类型:字符串,数字,元组,用frozenset()创建的集合为不可变集合。没有add()等方法。 2.可变数据类型:列表,字典,集合 访问顺序分类: 1.顺序访问:字符串,列表,元组 2.映射:字典 3....

C#中字符串的常用方法

1、查找某个字符或子字符串,  在指定字符串中首次出现的位置  IndexOf(charstring);//返回下标   返回-1,说明找不到   返回>=0的数字,说明存在 2、截取字符串     2.1 Substring(某个位置,几个长度);   在指定字符串中,    从某个位置开始截取几个长度字符       2.2 Substring(...

java中的“空格”用trim()无法去除?原来是这样!

1、原因:   从txt文件中读取一些数据导入mysql数据库,导入数据库之后发现有一个字段的前面有两个“空格”,后来在代码里我尝试用trim()、replace()等方法去除,发现怎么也去不掉,于是我将字符串里的这个“空格”的ASCII码输出,输出12288,查询资料后发现这个字符是全角空格,用trim()、replace()等方法是无法去除的,采用如下...

java强制类型转换

在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。 方法1:采用 Object.toString()方法 请看下面的例子: 1 Obj...