当在字符串中存储一个对象时,我能否确保将其转换回成功执行是否取决于其他因素?
DateTime dt = DateTime.UtcNow;
string pattern = dt.ToString();
DateTime retDt = DateTime.Parse(pattern);
这个问题问的是以下对象类型:
- 时间跨度
- 日期时间
- 内部
- 长
- 漂浮
- 双
我已尝试阅读多个论坛,但没有看到任何矛盾的例子。我也没有 从我的代码中得到任何异常,但我确信我还没有尝试所有可能的输入/场景。
最佳答案
当使用 ToString
时,您可以为数字和时间指定一种格式(有关更多信息,请参阅 this topic)。
在许多这些情况下,您希望使用的格式是往返格式(“R”表示 Single、Double 和 BigInteger 类型,“O”表示 DateTime。)这种格式确保所有信息都传递给字符串,并且可以解析回完全相同的数据。
将 IFormatProvider
传递给 ToString
对于避免语言环境问题也是必不可少的(例如,不同的语言环境可以使用不同的字符作为小数点分隔符。)使用静态 CultureInfo.InvariantCulture
解决了这个问题。
最后,如果您尝试持久化数据然后检索它,您可能需要考虑使用序列化器,它接受整个类并将它们写入各种格式。 .NET 有几个序列化程序,其中两个最突出的是 BinaryFormatter
(二进制)和 DataContractSerializer
(XML)。
关于c# - 从基本系统类型到字符串的转换是否可逆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18941833/