gpt4 book ai didi

c# - 在编译时类型未知时使用泛型

转载 作者:行者123 更新时间:2023-11-30 22:49:26 24 4
gpt4 key购买 nike

平台:C# 2.0 WinForms

我有一个工厂类,它根据我发送的类型提供特定数据映射器的实例,代码如下:

public static IDataMapper<T> GetMapper<T>() where T: IDto
{
Type mapperType = MapperLocator.GetMapper(typeof(T));

return (IDataMapper<T>)mapperType.Assembly.CreateInstance(mapperType.FullName);
}

我正在使用 DynamicProxy2 拦截对我的 DTO 对象的方法调用。在我的拦截方法中,我试图使用来自 Invocation.TargetType 的类型调用上述工厂。然而,这有一个异常(exception):

找不到类型或命名空间名称“invocation”。

显然,这是因为对泛型方法的任何调用都需要根据我在编译时的理解明确知道类型。显然,在这种情况下我不能这样做,而且我绝对不会对所有 DTO 对象执行 switch 语句。

那么,你们能提出一个策略或指出我做错了什么吗?我正在尝试使其尽可能通用,以便它可以适用于我的所有对象和任何新对象,以及代码可移植到其他项目。

提前致谢!

最佳答案

我对 DTO 不够熟悉,不知道这里是否有足够的信息来提供完整的解决方案。也就是说,another answer大部分是正确的; C# 编译器在编译时需要类型信息。

但是,有一种解决方法:反射。 System.Reflection (特别是 MethodInfo 我认为在你的情况下)将允许你编写一个完全通用的解决方案。

如果我没有正确理解这个问题,您要做的就是获取该工厂函数的 MethodInfo,将类型替换为 MakeGenericMethod ,然后调用它。

关于c# - 在编译时类型未知时使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1140359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com