问题标签 [iformatprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
541 浏览

c# - 将字符串转换为双精度,显式使用句点作为小数点

我的软件功能之一是将数字字符串转换为double数据类型。我想明确指出使用句点 (.) 作为小数点。因此,无论用户系统的语言设置如何,它都会正确读取以句点分隔的十进制。我相信解决方案是IFormatProvider在函数中使用参数Convert.ToDouble()。我不确定如何做到这一点。

示例:字符串:“3.14” 双精度:3.14

0 投票
2 回答
173 浏览

c# - 文件路径的日期时间格式提供程序

我有一个从 DateTime 戳创建的文件路径:

现在我正在尝试将我的文件路径转换回 DateTime 对象。

使用 Regex 我可以轻松删除"C:\\Logs\\Tests\",但现在我假设我需要提供IFormtProvider的实现以转换2015\\Mar\\24\\13_32_09\DateTime对象,但我没有找到任何类似的示例来说明通常如何完成。

任何示例,可能不是我回答的特定解决方案,都会有所帮助。

谢谢

0 投票
1 回答
2069 浏览

nlog - 如何将 formatProvider 参数添加到 NLog.LogEventInfo.Create 方法?

我有以下 NLog 2.0 代码来记录异常:

升级到 NLog 4.1 后,我看到以下警告:

函数 Create(logLevel As LogLevel, loggerName As String, message As String, exception As Exception) As LogEventInfo' 已过时:'使用 Create(LogLevel logLevel, string loggerName, Exception exception, IFormatProvider formatProvider , string message)'

...它要求我添加IFormatProvider formatProvider作为参数。我应该在那里添加什么?

0 投票
1 回答
872 浏览

c# - DataGridView 自定义格式:解析编辑值

假设我有一个绑定到 BindingSource 的 DataGridView。BindingSource 有一个 MyClass 类的 DataSource

DataGridView 将百分比显示为双精度数。所以 19% 的值显示为 0.19,这不是我想要的。

幸运的是,我可以更改列的单元格样式:

这使得该值根据当前区域性显示为百分比。在我的文化中,0.19 显示为 19%。

到目前为止,一切都很好。但是,如果操作员将此值更改为 18% 并结束编辑单元格,会发生什么情况。

  • 引发事件 CellValidating。在这种情况下,我可以检查输入的文本是否为完美百分比。

然而,紧接着我得到一个异常,字符串“18%”不能被格式化为双精度。

我想我必须告诉 datagridviewCellStyle 使用哪个 formatprivider:

问题假设我有以下课程:

我的格式提供者应该如何调用这个函数?

0 投票
1 回答
4770 浏览

c# - C#中的自定义字符串格式化程序

C#中的字符串格式化;

我可以使用它吗?是的。

我可以实现自定义格式吗?不。

我需要写一些东西,我可以将一组自定义格式选项传递给string.Format,这将对特定项目产生一些影响。

目前我有这样的事情:

但我希望能够对那个项目做一些事情:

我知道我可以做类似的事情.ToUpper().ToLower()等等,但我需要用字符串格式来做。

我一直在研究类似的东西IFormatProviderIFormattable但我真的不知道它们是否是我应该使用的东西,或者如何实现它们。

谁能解释我如何解决这个问题?

基本原理(以防万一你想知道......)

我有一个小程序,我可以在其中输入一组以逗号分隔的值和一个模板。string.Format这些项目与创建输出的模板一起传递给。我想提供模板格式选项,以便用户可以控制他们希望如何输出项目。

0 投票
1 回答
273 浏览

c# - 为什么格式不起作用?

我有类客户,我需要在不更改客户类的情况下制作不同的格式。我为此创建了 CustomerFormatProvider。但是当 Customer.Format() 调用时,它会忽略 CustomFormatProvider.Format。为什么 ???请帮忙!!!!

0 投票
3 回答
6192 浏览

c# - C# ASP.NET:无法将日期时间转换为字符串

我想将 a 转换datetime为字符串。

但是现在返回的结果04 August, 0016不是我需要的。

我希望结果是04 August, 2016

C#代码:

提前致谢 ;)

0 投票
2 回答
860 浏览

c# - 尝试实现自定义格式化程序,但从未调用 ICustomFormatter.Format

我试图弄清楚 IFormatProvider 和 ICustomFormatter在 DataGridView 列中的 Format TimeSpan 如何在 DataGridView 中自定义 TimeSpan 之后如何工作。我创建了一个完全自定义的格式化程序,无论格式化什么,它总是返回“foo”。

我在 Int 上使用它,但我认为它应该适用于所有类型,因为它不检查传递的值,它只是返回"foo".

我将它传递给int.ToString()

我得到的是:

虽然我希望得到的是:

编辑:我发现如何为 DateTime 创建和使用自定义 IFormatProvider?并且那里的答案说除了或DateTime.ToString()之外什么都不会接受,如果一个对象不是这些类型,即使它实现了,它也会被拒绝- https://stackoverflow.com/a/2382481/492336DateTimeFormatInfoCultureInfoICustomFormatter

所以我的问题是,这是否适用于所有ToString()方法的情况?它是否也适用于 DataGridView,在哪些情况下我可以传递真正自定义的格式化程序?

0 投票
1 回答
494 浏览

c# - 创建可以解析百分比的 IFormatProvider

我在实现一个IFormatProvider类时遇到了一些麻烦,该类可以将包含百分比的字符串解析为它们的等效数字。

问题不在于解析。Stackoverflow 提供了几种解决方案来将包含百分比的字符串解析为数字。

我宁愿不实现新类型。恕我直言,百分比不是一种新类型,它只是显示数字的一种不同方式。百分号就像小数点。在某些文化中,这是一个点,在其他文化中,这是一个逗号。这也不会导致不同的类型,只会导致不同的字符串格式。

函数Double.Parse(string, IformatProvider) (et al) 提供了解析字符串的可能性,这与标准 Double.Parse 所做的略有不同。

我遇到的问题在IFormatProvider. 可以订购Parse功能以使用特殊的IFormatProvider. 但是我不能给这个IFormatProvider任何功能来做特殊的解析。(顺便说一句:格式化为字符串几乎可以正常工作)。

MSDN 描述了 IFormatProvider 的功能

IFormatProvider 接口提供一个对象,该对象为格式化和解析操作提供格式化信息。... 典型的解析方法是 Parse 和 TryParse。

默认IFormatProviderParse(意味着函数,而不是动词解析)包含System.Globalization.NumberFormatInfoParse中提到的百分比格式的字符串

所以我想,也许我可以创建自己的IFormatProvider,它使用这个问题的第一行中提到的解决方案,这样它就可以用来根据提供的解析百分比NumberFormatInfo,对于每种类型都有Parse将字符串解析成的函数数字。

用法是:

我尝试过 的(这是第一个被要求的)

所以我创建了一个简单的IFormatProvider并检查了如果我打电话Double.Parse的话会发生什么IFormatProvider

调用使用:

确实,GetFormat被调用,要求一个NumberFormatInfo类型的对象

NumberFormatInfo是密封的。NumberFormatInfo因此,如果需要更改属性值,我只能返回一个标准。但是我不能返回提供特殊解析方法来解析百分比的派生类

String.Format(IFormatProvider,字符串,参数)

我注意到在转换为字符串时使用格式提供程序进行特殊格式化,适用于String.Format. 在这种情况下GetFormat,称为要求ICustomFormatter。您所要做的就是返回一个在ICustomFormatter.FormatICustomFormatter中实现并执行特殊格式的对象。

这按预期工作。返回 ICustomFormatter 后,调用它的 ICustomFormat.Format,我可以在其中进行我想要的格式设置。

Double.ToString(IFormatProvider)

但是,当我使用Double.ToString(string, IFormatProvider)时,我遇到了与Parse. 在GetFormat一个密封NumberFormatInfo的要求。如果我返回一个ICustomFormatter,则返回的值将被忽略并使用默认值NumberFormatInfo

结论:

  • String.Format(...) 可以与 IFormatProvider 一起正常工作,如果需要,您可以进行自己的格式化
  • Double.ToString(...) 需要一个密封的 NumberFormatInfo,你不能自己格式化
  • Double.Parse 需要一个密封的 NumberFormatInfo。不允许自定义解析。

那么:如何在 IFormatProvider 中提供 MSDN 承诺的解析?

0 投票
4 回答
297 浏览

c# - 在 C# 中解析非标准日期字符串

您将如何处理以下需要转换为 DateTime 对象的字符串值?

希望将其包含为公认的 DateTime 模式。当我遇到其他格式时,我只想实现一个新模式。