【发布时间】:2020-07-25 21:24:13
【问题描述】:
我已经搜索了几个小时,还发现了各种 stackoverflow 问题,但没有一个适合我的确切用例。这就是我所拥有的:一个采用 2 个泛型类型参数的方法。该库是封闭源代码,因此我无法对其进行修改。方法签名如下:
TTo Convert<TFrom, TTo>(TFrom obj)
但是,当您调用它时,您始终必须提供两个类型参数,如下所示:
Convert<Dog, Cat>(dog);
我正在尝试支持仅提供目标类型参数的用例:
Convert<Cat>(dog);
所以我需要的方法签名如下:
TTo Convert<TTo>(object obj){
var TFrom = obj.GetType();
Convert<TFrom, TTo>((TFrom)obj); // <--- throws an error right here
}
你能帮我解决这个问题吗?这个 SO 答案提到使用 Lambda expression builders 但我不确定如何在这个用例中做到这一点。这个 SO 答案提到了dynamic typing,但这不是我需要的。
编辑: linked "duplicate" question 很接近,但它只处理常规方法参数的动态转换泛型类型,但不处理我需要的 TYPE 参数。
【问题讨论】:
-
你有比选角更大的问题。您不能将
TFrom用作泛型类型参数,这使得它可能与stackoverflow.com/questions/266115/… 重复
标签: c# .net generics dynamic casting