編輯:將錯誤的術語裝箱更改爲轉換。C#在運行時動態地轉換通用對象
我有以下問題:
如果我創建類型Action或者Func鍵的新代表將澆鑄爲類型的委託。
var @delegate = Delegate.CreateDelegate(type, @object, methodInfo);
但我需要一個泛型類權鑄造對象。
考慮下面的例子:
class Example<T> {
Type GenericType() {
return typeof(T);
}
}
static Example<T> Create<T>(T @delegate) {
return new Example<T>();
}
Example.Create(@delegate).GenericType();
這將返回委託類型,因爲這是鑄造對象(@Delegate)的類型。
一種解決方案可能是投委託像這樣:
if(@delegate is Action)
Example.Create((Action)@delegate).GenericType();
但由於Delegate.CreateDelegate還可以創建行動或Func鍵代表,就不可能檢查所有的變化。
我不能改變泛型類,所以我必須施放委託。
我希望我能解釋我的問題。我不是以英語爲母語的人......
編輯:問題是typeof(T)沒有返回對象的「真實」類型。但我恐怕沒有解決辦法。
你真的需要像這樣的代表工作嗎?也停止使用@delegate和@object。在我意識到你正在縮短保留名稱之前,我正盯着它一分鐘。 – Euphoric 2011-03-05 22:35:29
這樣下來很糟糕只有值類型的值被裝箱,委託類型是一個引用類型,不太確定你想要做什麼,但是你用Delegate.DynamicInvoke()方法調用委託對象遲了一步 – 2011-03-05 22:38:49
我沒有像C#中的「委託」或「對象」這樣的快捷方式,它打破了類應該是駱駝式的轉換,所以這就是我的復仇^^ 是的,我需要像這樣的代表: – jhlllnd 2011-03-05 22:46:16