假設我有一個List<IMyInterface>
...類型參數 - 從獲取類型T的具體類型:IMyInterface的
我有實現IMyInterface
三類:MyClass1
,MyClass2
和MyClass3
我有一個只讀的字典:
private static readonly Dictionary<Type, Type> DeclarationTypes = new Dictionary<Type, Type>
{
{ typeof(MyClass1), typeof(FunnyClass1) },
{ typeof(MyClass2), typeof(FunnyClass2) },
{ typeof(MyClass3), typeof(FunnyClass3) },
};
我還有一個接口,IFunnyInteface<T> where T : IMyInterface
我有一個方法:
public static IFunnyInterface<T> ConvertToFunnyClass<T>(this T node) where T : IMyInterface
{
if (DeclarationTypes.ContainsKey(node.GetType())) {
IFunnyInterface<T> otherClassInstance = (FunnyInterface<T>) Activator.CreateInstance(DeclarationTypes[node.GetType()], node);
return otherClassInstance;
}
return null;
}
我想打電話給FunnyClasses的構造和插入的參數我MyClass的對象。我不想知道它是哪個對象:我只想用MyClass作爲參數實例化一些FunnyClass。
當我打電話ConvertToFunnyClass會發生什麼,T
是IMyInterface
類型的,當我嘗試將其轉換爲FunnyInterface<T>
,它說我不能轉換FunnyClass1
,例如,以FunnyInterface<IMyInterface>
我目前的解決方法(不一個美麗的),是這樣的:
public static dynamic ConvertToFunnyClass<T>(this T node) where T : IMyInterface
{
if (DeclarationTypes.ContainsKey(node.GetType())) {
var otherClassInstance = (FunnyInterface<T>) Activator.CreateInstance(DeclarationTypes[node.GetType()], node);
return otherClassInstance;
}
return null;
}
而且,因爲返回類型爲dynamic
我不喜歡它,所以當我從別的地方訪問它,我不知道它是什麼類型的,我失去了智能感知和東西。我也不知道任何性能影響。
任何線索?
在此先感謝!
分辨率
由於我使用C#4.0中,我可以停止鑄造用協方差(輸出位置只)的錯誤,所以我改變了我的IFunnyInterface
到
IFunnyInteface<out T> where T : IMyInterface
謝謝大家答覆。
這個例子有很多,所以如果我錯過了一個關鍵點,請原諒我。 FunnyClass1是否實現了IFunnyInterface? –
'FunnyClass1'實現'IFunnyInterface'。 –