有什么方法可以转换为动态通用接口(interface)..
Site s = new Site();
IRepository<Site> obj = (IRepository<s.GetType()>)ServiceLocator.Current.GetInstance(t)
显然,上面的内容无法通过此转换进行编译。无论如何,是否可以对通用接口(interface)进行动态转换。我尝试添加非通用接口(interface),但系统丢失了 Loc 容器中的对象。
谢谢
菲尔
最佳答案
动态转换在 C# 中并不容易实现。您可以使用“cast-by-example” - 但我不推荐这样做 - 它往往会令人困惑。
在您的情况下,不清楚为什么需要“动态”强制转换 - 如果您在编译时不知道类型,则无法访问它的任何方法或属性。这样的 Actor 阵容会给你带来什么?你也可以直接写:
IRespository<Site> obj =
(IRepository<ISite>)ServiceLocator.Current.GetInstance(t);
如果您使用泛型方法,则始终可以转换为泛型参数类型:
public void SomeMethod<T>( )
where T : new()
{
T s = new T();
IRepository<T> obj = (IRepository<T>)ServiceLocator.Current.GetInstance(t)
// ...
}
关于c# - 使用通用接口(interface)进行动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921645/