- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想将一个整数输出为罗马数字并遇到 this杰西切片机的回答。这是一种扩展方法,但我想知道如何利用 ToString(string, IFormatProvider)
来做类似的事情
int a = 10;
string b = a.ToString("RN", provider);
// OR
string c = string.Format(provider, "{0:RN} blah foo", a);
代替
int a = 10;
string b = a.ParseRomanNumeral();
// OR
string c = string.Format("{0} blah foo", a.ParseRomanNumeral());
我从未写过格式提供程序,所以我不确定所涉及的工作,但这是我的问题。 对于一些定义明确的格式转换,例如罗马数字,您会使用:
Parse
、TryParse
和 ToString
的 RomanNumeral 类为什么?
使用 string.Format()
及其同类方法(例如,StringBuilder.AppendFormat()
)是否会影响您的答案?显然,对于扩展方法,您无法使用其中一种格式化方法访问转换。
我认为实现整个范围的自定义类是最谨慎但也是最耗时的。使用自定义格式提供程序似乎会触及一些现有的全局化内容(如果有的话)。
最佳答案
格式提供程序适用于您自己的类型,但在使用内置类型时它们很笨拙,因为您必须创建提供程序的实例并将其传递给 Format 方法,这消除了格式说明符的优势。直接在 int 上使用扩展方法要方便得多。
关于c# - FormatProvider vs. 扩展方法 vs. 新类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1111255/
我想按照文化提供的顺序显示日期,但只显示我想要的元素。 DateTime.Tostring() 方法有 a list of patterns that are very useful但我想要一个很小的
我想将一个整数输出为罗马数字并遇到 this杰西切片机的回答。这是一种扩展方法,但我想知道如何利用 ToString(string, IFormatProvider) 来做类似的事情 int a =
我有以下 NLog 2.0 代码来记录异常: Dim theEvent = NLog.LogEventInfo.Create(NLog.LogLevel.Error, loggerName, mess
我是一名优秀的程序员,十分优秀!