c# - 使用通用接口(interface)进行动态转换

标签 c# .net generics

有什么方法可以转换为动态通用接口(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/

相关文章:

c# - SQL Server密码的保存方法

python - 无法保存python脚本文件

c# - 在私有(private)空隙之间传递颜色变量

c# - 为什么要为线程设置ProcessorAffinity?

c# - 如何使用 Objective-C 桥将 "completion handler"从 Unity 传递到 Swift

c# - 是否有一些实现日志记录功能的类,我可以使用?

c# - 基于输入数据的自定义返回类型

java - 使用目的 ?泛型中的 super T 或 T super SomeClass

generics - Ada 2012 中正式不完整类型的规则

c# - 具有特定类型的通用列表的扩展?