zoukankan      html  css  js  c++  java
  • .Net中stirng转System.Type的一种实现思路

    今天在上班的过程中,许长时间未联系的大学小伙伴发来消息,带着一个疑问来找我。

     

    他的需求是type动态添加,这对我来说当然很easy,用泛型就好了,

    随后,手起刀落,Demo就写出来,如下:

    写了一个方法,传入T进行了where T:class约束,,如此easy,小伙伴怎么不会呢?然而事情并非如此简单。

    原来小伙伴的需求,简单来说就是把string转成type,这就有点为难了,好像据我所知,好像确实没有直接类似这样Convent.ToType(string typeName)这样的方法。

    突然想到了在做项目的做成中,可以取出所有的程序集并取出每个程序集下的type,最终实现取出程序中的所有type

    AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())

    那我们是不是可以给的所有type做一个筛选,实现根据传入的string类型的typeName,取出以改typeName为type的Name的元素?

    代码如下:

      static List<Type> ConventToTypes(string[] typeName)
            {
                var types = AppDomain.CurrentDomain.GetAssemblies()
                    .SelectMany(a => a.GetTypes())
                    .Where(u=>typeName.Contains(u.Name))
                    .ToList();
                return types;
            }

    事实证明是可行的,运行结果如下:

    最终,通过一个筛选的过程,成功实现了“字符串转System.Type”。

    哈哈,强行在小伙伴面前装了一逼。

    在公司中午休息,把这个方法整理出来,主要为了分享(在小伙伴面前装逼的快感)我的一种这样解决问题的思路:两种类型无法直接转换时,可以尝试着先把这些类型取出来,然后再做一个条件筛选,如果筛选后找到了结果,那么转换成功,否则,转换失败!

    如果大家有什么更好的办法,欢迎在下方分享!

  • 相关阅读:
    客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)
    自绘LISTVIEW的滚动条(Delphi实现)
    文字滚屏控件(SliderPanel)
    自动注册服务NET Core扩展IServiceCollection
    Three.js基础
    Cordova+Asp.net Mvc+GIS
    Netty
    TagHelper
    jQuery、实例大全
    React和Angular
  • 原文地址:https://www.cnblogs.com/CoderAyu/p/9013821.html
Copyright © 2011-2022 走看看