当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-ConvertinganObjecttoaGeneric分享

时间:2023-04-10 19:55:42 C#

ConvertinganObjecttoaGeneric我已经有一段时间没有睡觉了,所以这可能比我想象的要容易。我有一个或多或少的通用类:publicclassReferencewhereT:APIResource//<-APIResourceisabstractbtw{privateT_value=null;公共T值{获取{返回值;}}}在其他地方,在自定义序列化方法中,传入的对象实际上是一个Reference的实例。我只想跳转到每个Reference对象都有的“值”属性,所以我想去:stringserialize(objecto){returnbase.serialize(((Reference)o).value);}当然,生活并没有那么简单,因为正如编译器所说:使用泛型类型“Reference”需要1个类型参数我怎么能做我想做的事呢?您可以创建具有属性的协变通用接口:interfaceIReferencewhereT:ApiResource{TValue{get;然后您可以将IReference转换为IReference或IReference。SLaks的回答是完美的。我只是想扩展一点:有时您无法用接口替换类。仅在这种情况下,您可能希望使用动态函数,以便调用值属性:((dynamic)o).value);//在你的情况下你会抛出InvalidCastExceptionthrownewArgumentException("notaReference","o");这只是另一种选择,我建议非常小心地使用它。不要忘记检查它的通用类型-->o.GetType()。IsGenericType,在使用o.GetType()之前。GetGenericTypeDefinition()otherwisethrowsanexception..以上就是C#学习教程:对象转泛型的全部内容。收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: