我正在审核一些代码,我发现了以下内容:
public static void Foo<T>(T t) { //whatever }
dynamic someDynamicValue = ....
Foo(someDynamicValue); //does making this call dynamicly make any sense?
如果您实际检查T
内的Foo
类型,您会看到它是object
。那么,为什么不简单地强制参数的类型为object
并跳过让类型推断解析为dynamic
的整个运行时价格?
var someDynamicValue = ....
Foo(someDynamic as object);
重要提示:我知道,完全确定someDynamic
不是值类型。
我是否遗漏了某些内容并且更改了代码的语义,或者这是一个无害的修改?
另一个问题alt如果Foo
的签名在Foo<dynamic>(dynamic t)
,那么泛型类型参数将解析为运行时类型而不是object
。但事实并非如此。