.Net中stirng轉System.Type的一種實現思路

 

今天在上班的過程當中,許長時間未聯繫的大學小夥伴發來消息,帶着一個疑問來找我。spa

 

 

他的需求是type動態添加,這對我來講固然很easy,用泛型就行了,3d

隨後,手起刀落,Demo就寫出來,以下:code

寫了一個方法,傳入T進行了where T:class約束,,如此easy,小夥伴怎麼不會呢?然而事情並不是如此簡單。blog

原來小夥伴的需求,簡單來講就是把string轉成type,這就有點爲難了,好像據我所知,好像確實沒有直接相似這樣Convent.ToType(string typeName)這樣的方法。字符串

忽然想到了在作項目的作成中,能夠取出全部的程序集並取出每一個程序集下的type,最終實現取出程序中的全部typestring

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

那咱們是否是能夠給的全部type作一個篩選,實現根據傳入的string類型的typeName,取出以改typeName爲type的Name的元素?class

代碼以下:泛型

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

事實證實是可行的,運行結果以下:List

最終,經過一個篩選的過程,成功實現了「字符串轉System.Type」。程序

哈哈,強行在小夥伴面前裝了一逼。

 

在公司中午休息,把這個方法整理出來,主要爲了分享(在小夥伴面前裝逼的快感)個人一種這樣解決問題的思路:兩種類型沒法直接轉換時,能夠嘗試着先把這些類型取出來,而後再作一個條件篩選,若是篩選後找到告終果,那麼轉換成功,不然,轉換失敗!

 

若是你們有什麼更好的辦法,歡迎在下方分享!

相關文章
相關標籤/搜索