c# – 扩展Convert.ChangeType以根据请求生成用户定义的类型
给定类:
public class Foo { public string Name { get; set; } } 可以通过Convert.ChangeType从一个字符串创建一个Foo实例: Type type = typeof(Foo); object value = "one"; value = System.Convert.ChangeType(value,type); 这是第三方API如何尝试重建对象.有人提到这是可能的隐式运算符,但从我的理解,将让我做以下,不创建对象: Foo foo = new Foo() { Name = "one" }; string fooAsString = foo; // implicit conversion -- no cast needed 有没有办法以这种方式创建对象?另外,如果有另一种方法,我确实有能力更改Convert.ChangeType. 更新:
并且添加运算符没有解决问题. 解决方法
根据
the MSDN documentation:
看看IConvertible界面,它有一个 编辑:在你的情况下,你似乎想将一个字符串转换成一个Foo.由于字符串类型(显然)不会在其IConvertible实现定义转换到富,我相信你的运气了. 更新:我不想建议这是你应该总是处理这种问题,但… 我在Reflector看了Convert.ChangeType的代码.我不会在这里重现.但是基本上它的做法正如文档所说:它只适用于: > value参数是实现IConvertible的类型的非空实例,或者: 然后,它循环通过IConvertible支持的所有类型(显然不包括任何用户定义的类型),并最终使用 所以,我们需要看看字符串类型的ToType的实现. 可悲的是,这是一个不幸的路线: return Convert.DefaultToType(this,type,provider); DefaultToType做什么?与ChangeType完全相同(减去ToType回退,显然是为了避免无限递归). 所以这只是不行. 如果您绝对遵守在场景中使用Convert.ChangeType的第三方库,我建议您联系图书馆的开发人员,并要求他们以某种方式扩展其API,以便您完成您要完成的任务.一些可能性可能是: >接受可选的转换器< string,T>或Func< string,T>由Ben Voigt在评论中提出的委托参数. 无论如何,最好的运气. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |