get; } public string LastName { set; get; } public string ToString(string format, IFormatProvider ) { //关键代码,后面给出 } } 这里将会列出需要实现IFormattable的方法ToString(string format, IFormatProvider 二、编写 PersonFormatter类,让其继承IFormatProvider及ICustomFormatter,用于对字符串进行格式化,代码如下: class PersonFormatter : IFormatProvider,ICustomFormatter { public string Format(string format, object arg, IFormatProvider ,ICustomFormatter { public string Format(string format, object arg, IFormatProvider formatProvider
args); 我们可以通过传入IFormatProvider接口来控制输出格式,.Net Framework中的源码逻辑: if (provider ! , object arg, IFormatProvider formatProvider); 对于IFormatProvider接口里面的GetFormat方法返回值类型是object,其实是不准确的, 如果返回null, .Net Framework会认为提供的IFormatProvider provider参数无效,接下来会当成调用下面的方法来处理。 类实现IFormatProvider接口: public class MyFormatProvider : IFormatProvider { public object GetFormat(Type 实现IFormatProvider接口和ICustomFormatter接口,并显式传入string.Format()方法,实现方式复杂,但是好处是不需要修改填入的参数的源码。
我们先来看看第一种策略: public class FriendFormatter : IFormatProvider, ICustomFormatter { // 实现 IFormatProvider 我们现在来对上面的代码进行一下测试: public class ObjectFormatProvider : IFormatProvider { // 实现 IFormatProvider 接口 对象,这个IFormatProvider由我们自己定义,来实现我们所需要的格式化效果。 ()静态方法,传递IFormatProvider对象。 ) 就可以了: public class OutFriendFormatter : IFormatProvider, ICustomFormatter { // 实现 IFormatProvider
{ throw new InvalidCastException(); } byte IConvertible.ToByte(IFormatProvider { throw new InvalidCastException(); } char IConvertible.ToChar(IFormatProvider { throw new InvalidCastException(); } DateTime IConvertible.ToDateTime(IFormatProvider { throw new InvalidCastException(); } int IConvertible.ToInt32(IFormatProvider { return ToString(); } object IConvertible.ToType(Type conversionType, IFormatProvider
如果未提供 CultureInfo 或 System.IFormatProvider 对象,则重载成员提供的默认值可能不会在所有区域设置中产生您想要的效果。 CA1305:指定 IFormatProvider 某方法或构造函数调用的一个或多个成员有接受 System.IFormatProvider 参数的重载,但该方法或构造函数没有调用接受 IFormatProvider 如果未提供 System.Globalization.CultureInfo 或 IFormatProvider 对象,则重载成员提供的默认值可能不会在所有区域设置中产生您想要的效果。
TextWriter的构造,常用属性和方法 IFormatProvider的简单介绍 如何理解StreamWriter? IFormatProvider接口的简单介绍 其实IFormatProvider接口 从字面上就能理解了,一个格式化的提供者 大家记得我们常用的string.format(“{0:P}”,data);么 IFormatProvider在这里被隐式的调用了 关于隐式调用的各种方式,用个简单的例子向大家说明下: //有关数字格式化隐性使用IFomatProvider的例子 #if true ("百分号的另一种写法,注意小数的四舍五入{0:0%.00}", 0.12345); Console.WriteLine("\n\n"); #endif 输出结果: 也就是说IFormatProvider 让我们通过NumberFormatInfo类来温故下: 这个密封类实现了IFormatProvider接口,主要实现了一个数字格式化的类,下面是一些规定的格式说明符: c、C 货币格式。
3、DateTime类型的字符串输出 因为,不同国家的时间展示不一样,所以DateTime的字符串输出必须使用到IFormatProvider参数 ? DateTimeFormatInfo类实现了IFormatProvider接口.下面是其静态方法GetInstance()方法的明细: ? 该方法获取了传入IFormatProvider参数的对应语言文化的时间格式化信息(DateTimeFormatInfo)实例. 4、IFormattable接口实现方法参数解析 (1)、IFormatProvider参数 DateTime默认的ToString()方法 ? 注:FCL中实现IFormatProvider的接口只有三个,分别是 ? ? ?
TextWriter的构造,常用属性和方法 IFormatProvider的简单介绍 如何理解StreamWriter? IFormatProvider接口的简单介绍 其实IFormatProvider接口 从字面上就能理解了,一个格式化的提供者 大家记得我们常用的string.format(“{0:P}”,data);么 IFormatProvider在这里被隐式的调用了 关于隐式调用的各种方式,用个简单的例子向大家说明下: //有关数字格式化隐性使用IFomatProvider的例子 #if "百分号的另一种写法,注意小数的四舍五入{0:0%.00}", 0.12345); Console.WriteLine("\n\n"); #endif 输出结果: 也就是说IFormatProvider 让我们通过NumberFormatInfo类来温故下: 这个密封类实现了IFormatProvider接口,主要实现了一个数字格式化的类,下面是一些规定的格式说明符: c、C 货币格式。
来给其添加扩展方法,代码如下: public static class StringUtilities { public static string FormatWith(this string format,IFormatProvider format.FormatWith(provider, new object[] { org0 }); } public static string FormatWith(this string format, IFormatProvider 也就是说,代码如下: public class StringUtilities { public static string FormatWith(this string format, IFormatProvider public static class StringUtilities { public static string FormatWith(this string format, IFormatProvider provider, new object[] { org0 }); } public static string FormatWith(this string format, IFormatProvider
int.Parse(parts[0]); Day = int.Parse(parts[1]); } public static MyDate Parse(string s, IFormatProvider s, IFormatProvider?
int.Parse(parts[0]); Day = int.Parse(parts[1]); } public static MyDate Parse(string s, IFormatProvider s, IFormatProvider?
下面我主要列出来它的主要成员: public abstract class TextWriter : MarshalByRefObject, IDisposable { Encoding Encoding; IFormatProvider StringWriter: public class StringWriter : TextWriter { public StringWriter(); public StringWriter(IFormatProvider formatProvider); public StringWriter(StringBuilder sb); public StringWriter(StringBuilder sb, IFormatProvider ; public override void Write(string value); ... } 在StringWriter类中,有两个比较重要的成员: StringBuilder sb; IFormatProvider
formatProvider"></param> /// <returns></returns> public string ToString(string format, IFormatProvider public string FirstName { get; set; } public string LastName { get; set; } } 一个典型的格式化器应该继承IFormatProvider 和ICustomerFormatter,看代码: public class PersonFomatter:IFormatProvider,ICustomFormatter { #region IFormatProvider成员 public object GetFormat(Type formatType) { if ( endregion #region ICustomFormatter成员 public string Format(string format, object arg, IFormatProvider
_initialized) throw new InvalidOperationException(string.Format((IFormatProvider) CultureInfo.CurrentCulture this.Transport == null) return PersistentConnection.FailResponse(context.Response, string.Format((IFormatProvider connectionToken)) return PersistentConnection.FailResponse(context.Response, string.Format((IFormatProvider , objArray); } if (string.IsNullOrEmpty(str1)) { message = string.Format((IFormatProvider (context), StringComparison.OrdinalIgnoreCase)) return true; message = string.Format((IFormatProvider
string) Convert.ToDateTime(string) 注意:string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方式二:Convert.ToDateTime(string, IFormatProvider
类型格式化字符串 IFormattable和IFormatProvider的用法。这个两个接口项目中不常使用,但是IFormatProvider倒是可以作为分离变化的教程来学习。
使用public static DateTime ParseExact(string s, string format, IFormatProvider provider);实例方法转换时间,可以指定转换的格式 dateTime ="2017-11-18 17:25:53";会抛异常,这种类型对应格式为:yyyy-MM-dd HH:mm:ss string dateTime = "20171118172553"; IFormatProvider
{ static TSelf Parse(string s, IFormatProvider? s, IFormatProvider?
有导入的数据列格式判断转换,日期格式强转等等,都没什么效果,最后解决的方法如下: // NPOI导入日期格式处理 string mytime = dateStr.Trim(); // dateStr为Excel导入的日期值 IFormatProvider
例如,除非使用显式强制转换,否则以下语句将会在 )3.5; Int32.Parse方法仅允许 Convert.ToInt32(String,IFormatProvider)底层调用了Int32.Parse