- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
例如,当将 decimal
转换为 string
时,您使用 CultureInfo.InvariantCulture
并将其作为 IFormatProvider
。但为什么这个重载不在 object
中?
一个不错的实现是:
public virtual string ToString()
{
// yadayada, usual ToString
}
public virtual string ToString(IFormatProvider provider)
{
return ToString();
}
这不会对 object
类造成伤害或好处,但是从它派生的对象可以覆盖重载,并且当您不确定类型时调用它会容易得多。
让我遇到这个问题的原因是我正在制作一个方法,该方法将获取类的所有属性并将其写入 xml。因为我不想检查对象的类型,所以我只是调用了 ToString
。但如果这是一个小数,输出将基于线程的 CurrentCulture
,这不是最优的。我能看到的唯一解决方法是将 CurrentCulture
更改为 InvariantCulture
,然后将其更改回之前的状态。但这会很难看,因为我必须编写 try finally block 等。
我当前的代码是:
foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
Where(c => ValidTypes.Contains(c.PropertyType)))
{
var value = property.GetValue(order, null);
if (value != null)
{
writer.WriteElementString(property.Name,
value.ToString());
}
}
但我希望它是:
foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
Where(c => ValidTypes.Contains(c.PropertyType)))
{
var value = property.GetValue(order, null);
if (value != null)
{
writer.WriteElementString(property.Name,
value.ToString(CultureInfo.InvariantCulture));
}
}
不对 object
重载有什么好处?
最佳答案
尝试将您的值
转换为IFormattable
:
foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
Where(c => ValidTypes.Contains(c.PropertyType)))
{
var value = property.GetValue(order, null);
if (value != null)
{
var formattable = value as IFormattable;
writer.WriteElementString(property.Name,
formattable == null ? value.ToString() : formattable.ToString(null, CultureInfo.InvariantCulture));
}
}
关于c# - 为什么对象没有接受 IFormatProvider 的重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7521306/
如果我们使用 ParseExact 方法对使用指定格式的exact 日期时间进行解析,为什么我们需要提供一个IFormatProvider 对象?它背后的意义是什么? 例如: DateTime.Par
我的对象中有一个整数值。我需要将其转换为整数值。所以我就这样做了。System.Convert.ToInt64(对象)但FxCop说我需要提供IFormatProvider。字符串数据类型我对提供 I
我在玩 Datetime.ParseExact 方法,它需要一个 IFormatProvider... 它可以输入 null,但它到底做了什么? 最佳答案 除了 Ian Boyd 的回答: Cultu
我尝试在我们产品的几个程序集上运行 FxCop,我得到了很多“指定 IFormatProvider”规则的匹配项。 碰巧,其中一些是合法的,但它也匹配这样的代码: Logger.DebugFormat
我正在使用为我指定的区域性将字符串转换为值作为 IFormatProvider。 我想弄清楚他们给我的是哪种文化。 我意识到 IFormatProvider 不一定必须对应于 System.Globa
var numberFormat = new NumberFormatInfo(); numberFormat.NumberDecimalSeparator = "."; numberFormat.N
我在从 double 到 string 的转换时遇到问题。 我要转换: double value: 0.0772486324655191 string value: 0.077248632465519
我正在尝试创建一个具有以下签名的字符串扩展方法: public static DateTime? TryParseExact(this string src, string format, IForm
如何将 IFormatProvider 传递给 StreamWriter? 特别是我想创建一个 new StreamWriter("myfile.txt", CultureInfo.Invariant
例如,当将 decimal 转换为 string 时,您使用 CultureInfo.InvariantCulture 并将其作为 IFormatProvider。但为什么这个重载不在 object
我正在尝试使用 IFormatProvider 来自定义一些数据绑定(bind);但是,永远不会调用 IFormatProvider 类。我在我的自定义格式类中的两个函数的开头都放置了断点,并且都没有
如果我错了,请有人纠正我,但是在 C# 中解析 yyyy/MM/dd(或其他特定格式)日期应该就像一样简单 DateTime.ParseExact(theDate, "yyyy/MM/dd"); 但是
我试图创建一个 IFormatProvider 实现来识别 DateTime 对象的自定义格式字符串。这是我的实现: public class MyDateFormatProvider : IFor
在 Convert 类中进行以下重载对我来说是有意义的 public static double ToDouble(string value, IFormatProvider provider); 示
为什么我们要在DateTime.ParseExact中使用IFormatProvider,如果已经有一个格式参数? DateTime.ParseExact(inputString, format, c
这段代码给我这个错误: var n = "9/7/2014 8:22:35 AM"; var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ"); 但这段代码可以正常工作
在 ParseExact 方法的第一次重载中 public static DateTime ParseExact (string s, string format, IFormatProvider p
在 DateTime 格式字符串中有没有办法只包含月份的第一个字母? new DateTime(2015, 1, 12).ToString("M-dd-yy") // "1-12-15", but
IFormattable、IFormatProvider和ICustomFormatter有什么区别和联系,什么时候用?一个简单的实现示例也会非常好。 我并不是说什么时候在 .net 框架中使用它,而
如果您在字节上调用 ToString 以将其转换为 2 位十六进制值,是否以任何方式使用 CultureInfo.CurrentCulture 或 CultureInfo.InvariantCultu
我是一名优秀的程序员,十分优秀!