据我所知,在.NET中至少有3种转换数据类型的方法:
使用System.ComponentModel.TypeConverter
var conv = System.ComponentModel.TypeDescriptor.GetConverter(typeof(int));
var i1 = (int)conv.ConvertFrom("123");使用System.Convert.ChangeType()
var i2 = (int) Convert.ChangeType("123", typeof (int));使用目标类型的解析/TryParse方法:
var i3 = int.Parse("123"); // or TryParse当使用哪种方法在.NET基数据类型之间转换(特别是从字符串到其他数据类型)时,是否有任何指导原则或规则?
发布于 2017-02-01 13:59:31
我将迟贴6年,因为我认为这是一个很好的问题,我对现有的答案不满意。
如果要从字符串转换为具有这些方法的类型Parse/TryParse,则只能使用静态方法。(当您预期转换可能失败时,请使用TryParse )。
正如System.Convert的文档所说,它的要点是将从一个基本数据类型转换为另一个基本数据类型。请注意,通过转换,您还可以使用一个Object并自己想出如何转换它的方法。
至于System.ComponentModel.TypeConverter,作为“类型转换器”堆栈溢出标记的文档,它们主要用于将转换为字符串,当您希望为designer序列化或在属性网格中的显示E 218时提供类实例的文本表示时
发布于 2017-11-17 17:21:24
转换
转换类使用在目标类型中实现的IConvertible方法。
不幸的是,实现IConvertible意味着编写大量样板代码,如果目标类型是结构,则Convert.ChangeType会导致装箱。
TypeConverterAttribute
TypeDescriptor.GetConverter使用TypeConverterAttribute和IMHO,既提供了更好的API来转换类型,也提供了使类型可转换的更优雅的方法。但是Convert类也存在相同的性能问题,原因是这些方法不是泛型的。
解析/TryParse
使用T.Parse/T.TryParse方法是从字符串创建对象的实际方法,因为它不涉及不必要的装箱。它们通常也有重载,从而更好地控制如何解析字符串。
TryParse方法允许您处理要解析的字符串是从用户输入获得的情况,或者是另一种无法保证格式正确的字符串,而不会引发异常的情况。
因此,您应该在可能时调用该类型的Parse/TryParse方法,只有在编译时不知道目标类型时,即只有在只有表示目标类型的类型对象时,才调用其他方法。
您还可以查看我的名为ValueString的小型库,它找到了最合适的类型解析方法,并使用它解析字符串。
发布于 2011-08-10 12:38:09
根据我个人的喜好和编码标准,我选择以下两种:
Convert。当我绝对确信这些值将是我所期望的时,我就使用它。
int I= Convert.ToInt32("123");TryParse。我在处理用户输入时使用这个。这也有利于在解析时使用本地化格式。
int I= 0;bool parsed =int 32.(“123”,out i);还可以使用TryParseExact,其中可以解析特定的模式。它在某些情况下是有用的。
https://stackoverflow.com/questions/7010669
复制相似问题