我試圖檢查給定類型是否爲動作委託,而不管參數數量多少。檢查某個類型是否爲動作委託
以下代碼是我知道如何做到這一點的唯一方法。
public static bool IsActionDelegate(this Type source)
{
return source == typeof(Action) ||
source.IsOfGenericType(typeof(Action<>)) ||
source.IsOfGenericType(typeof(Action<,>)) ||
....
source.IsOfGenericType(typeof(Action<,,,,,,,,,,,,,,,>));
}
IsOfGenericType()
是我的另一個擴展方法,它做什麼它說,它會檢查該類型是否是給定的泛型類型。
有什麼更好的建議嗎?
我不知道如果名稱搜索是非常糟糕的,因爲名稱來自庫命名空間而不是用戶代碼。 –
偉大的洞察力,謝謝!我試圖做一個通用的Delegate.CreateDelegate方法。例如。 'CreateDelegate>(所有者,方法);'這是一項正在進行的工作,所以我不知道它是否可能。但這就是爲什麼我需要分析通用參數並檢查預期的代理類型。 –
@Ritch - 它讓我想起使用javascript來檢查瀏覽器類型,而不是功能檢查 - 後者更乾淨。在這種情況下可能是沒有根據的,但如果我不是絕對必須的話,我不會碰這個名字。 – BrokenGlass