在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
格式化是将一个对象转化为字符串,解析则是将字符串转为对象。 最简单的格式化字符串的机制是ToString方法,它能为所有简单的值类型(bool、DateTime(offset)、TimeSpan、Guid和所有的数字类型)产生有意的字符串输出。同时这些类型都定义了静态Parse方法来完成反向转换。 例如: string s = "1"; Console.WriteLine(s); Console.WriteLine("解析为int类型"); int a = int.Parse(s); Console.WriteLine(a); 如果解析S失败那么系统会抛出异常(FormatException),如果使用TryParse那么系统不会抛出异常,而时返回false string s = "1"; Console.WriteLine(s); bool b = bool.TryParse(s, out bool isOk); Console.WriteLine("解析为bool类型"+isOk); 二.格式提供器格式化提供器:使用格式提供器的方式是IFormatProvider接口,所有的数字类型和Datetime类型都实现了这个接口(所有的enum都可以格式化但是它们没有特殊的IFormatter类) 1.格式提供器和CultureInfo在格式提供器的上下文中,CultureInfo扮演了根据文化的区域设置返回NumberFormatInfo和DateTimeFormatInfo两个格式提供器的间接机制。 //使用适用于en-GB文化默认的NumberFormatInfo对象 Console.WriteLine("使用特殊文化-英国英语"); CultureInfo uk = CultureInfo.GetCultureInfo("en-GB"); Console.WriteLine(3.ToString("C", uk));//这个值是根据文化变化的 //使用不变的文化对DateTime进行格式化 DateTime dt = new DateTime(2020, 1, 1); CultureInfo iv = CultureInfo.InvariantCulture; Console.WriteLine(dt.ToString(iv)); Console.WriteLine(dt.ToString("d", iv)); 2.组合格式化组合格式字符串将变量替代符和格式字符串组合在一起。 var s = string.Format(CultureInfo.InvariantCulture, "{0}", "测试"); Console.WriteLine(s); object obj = "测试"; string s; if (obj is IFormattable) { s = ((IFormattable)obj).ToString(null, CultureInfo.InvariantCulture); } else if (obj == null) { s = ""; } else { s = obj.ToString(); } Console.WriteLine(s); 这两段代码是能实现一样的效果。
3.通过格式提供器进行解析格式提供器并未对解析提供标准结构。相反,每一个参与的类型都会重载它的静态Parse和TryParse方法接受一个格式提供器,以及一个可选的NumberStyles或DateTimeStyles枚举参数 例如允许括号或者货币符号出现在输入字符串中(默认这两个选项都是false) int minusTwo = int.Parse("(2)", NumberStyles.Integer | NumberStyles.AllowParentheses); Console.WriteLine(minusTwo); 结果返回-2; 4.IFormatProvider和ICustomFormatter所有的格式提供器都是实现了IFormatProvider。这个方法提供了一种间接进行格式化的手段CultureInfo就是用它来返回何时的NumberStyles和DateTimeStyles对象并完成格式化操作的 测试文章:自定义格式提供器 三.标准格式字符串与解析标记标准格式字符串决定了数字类型或Datetime(offset)转化为字符串的方式。 标准格式字符串:提供基本的格式控制。标准格式字符串是由一个字母及其后续的可选数字组成。 自定义格式字符串:通常使用模板对每一个字符实现精准控制。(自定义格式字符串与自定义格式提供器无关) 1.数字格式字符串测试文章:标准数字格式字符串 2.NumberStyles测试文章:NumberStyles 3.Date/Time格式字符串DateTime/DateTimeoffset的格式字符串根据它们是否使用文化和格式提供器的设置。 (1)DateTime的解析与误解析将月份或天数放在前面的日期字符串是具有二义性的,非常容易出现误解析。 解决方法: 1.在格式化和解析时总显示指定相同文化 2.以一种文化无关的方式格式化DateTime和DateTimeoffset //演示第二种方法 string s = DateTime.Now.ToString("o"); Console.WriteLine(s); DateTime dt1 = DateTime.ParseExact(s, "o", null); Console.WriteLine(dt1); DateTime dt2 = DateTime.Parse(s); Console.WriteLine(dt2);
4.DateTimeStylesDateTimeStyles是一个标记枚举类型。它可以在调用Parse的时候提供额外的指令。 5.枚举的格式字符串这个直接上结果 //枚举的格式字符串 Console.WriteLine(System.ConsoleColor.Red.ToString("g"));//G或g Console.WriteLine(System.ConsoleColor.Red.ToString("f"));//F或f Console.WriteLine(System.ConsoleColor.Red.ToString("d"));//D或d Console.WriteLine(System.ConsoleColor.Red.ToString("x"));//X或x
关于枚举后续还会有更加详细的文章介绍格式化这一块。 欢迎加入.net学习交流群:925362372 |
请发表评论