要解析一个字符串到int,一个调用Int32.Parse(string),double,Double.Parse(string),long,Int64.Parse(string)等等.
是否可以创建一个使其通用的方法,例如ParseString(T)(string)?其中T可以是Int32,Double等.我注意到数字类型不实现任何公共接口,而Parse方法没有任何公共父.
有没有办法达到这个或类似的东西?
解决方法
您基本上必须使用反射来找到相关的静态Parse方法,调用它,并将返回值转回到T.或者,您可以使用
Convert.ChangeType
或获取相关的
TypeDescriptor
和关联的
TypeConverter
.
一种更有限但有效(在某些方面很简单)的方法是将字典从类型保存到解析委托 – 将委托转换为Func< string,T>并调用它.这将允许您针对不同类型使用不同的方法,但您需要了解您需要转换为最前面的类型.
无论你做什么,你将无法指定一个通用约束,这将使编译时安全.真的需要像static interfaces这样的想法.编辑:如上所述,有IConvertible
接口,但这并不一定意味着你可以从字符串转换.另一种类型可以实现IConvertible,而无需从字符串转换到该类型.