第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

調(diào)用Assembly.GetTypes()時(shí)如何防止ReflectionTypeLoad

調(diào)用Assembly.GetTypes()時(shí)如何防止ReflectionTypeLoad

明月笑刀無(wú)情 2019-10-17 14:16:58
我正在嘗試使用類似于以下代碼的程序集來(lái)掃描實(shí)現(xiàn)特定接口的類型的類型:public List<Type> FindTypesImplementing<T>(string assemblyPath){    var matchingTypes = new List<Type>();    var asm = Assembly.LoadFrom(assemblyPath);    foreach (var t in asm.GetTypes())    {        if (typeof(T).IsAssignableFrom(t))            matchingTypes.Add(t);    }    return matchingTypes;}我的問(wèn)題是,在某些情況下ReflectionTypeLoadException調(diào)用時(shí)會(huì)asm.GetTypes()出現(xiàn),例如,如果程序集包含引用當(dāng)前不可用的程序集的類型。就我而言,我對(duì)引起問(wèn)題的類型不感興趣。我要搜索的類型不需要不可用的程序集。問(wèn)題是:是否可以以某種方式跳過(guò)/忽略導(dǎo)致異常但仍處理程序集中包含的其他類型的類型?
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

一種相當(dāng)討厭的方式是:


Type[] types;

try

{

    types = asm.GetTypes();

}

catch (ReflectionTypeLoadException e)

{

    types = e.Types;

}

foreach (var t in types.Where(t => t != null))

{

    ...

}

但是絕對(duì)必須這樣做。您可以使用擴(kuò)展方法在“客戶端”代碼中使其更美觀:


public static IEnumerable<Type> GetLoadableTypes(this Assembly assembly)

{

    // TODO: Argument validation

    try

    {

        return assembly.GetTypes();

    }

    catch (ReflectionTypeLoadException e)

    {

        return e.Types.Where(t => t != null);

    }

}

您可能希望將return語(yǔ)句從catch塊中移出-我不是很熱衷于自己在其中,但是它可能是最短的代碼...


查看完整回答
反對(duì) 回復(fù) 2019-10-17
?
長(zhǎng)風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

就我而言,相同的問(wèn)題是由應(yīng)用程序文件夾中存在不需要的程序集引起的。嘗試清除Bin文件夾并重建應(yīng)用程序。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
  • 3 回答
  • 0 關(guān)注
  • 773 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)