【发布时间】:2015-12-08 19:39:22
【问题描述】:
我有两个函数定义如下。方法一会动态返回任意类型,方法二会返回泛型类型:
方法一
public dynamic dynamicFun(int n)
{
switch (n)
{
case 0:
return 0;
case 1:
return "N";
case 2:
return 1.3;
default:
return 'v';
}
}
方法二:
public static T genericFun<T>(int n)
{
switch (n)
{
case 0:
return (T)System.Convert.ChangeType(0, Type.GetTypeCode(typeof(T)));
case 1:
return (T)System.Convert.ChangeType("N", Type.GetTypeCode(typeof(T)));
case 2:
return (T)System.Convert.ChangeType(1.3, Type.GetTypeCode(typeof(T)));
default:
return (T)System.Convert.ChangeType('V', Type.GetTypeCode(typeof(T)));
}
}
现在我的问题是;
- 这两种方法有什么区别?
- 哪些地方可以使用动态方法,哪些地方可以使用泛型?
- 与动态相比,通用有什么优势吗?
【问题讨论】:
-
is there any advantage for generic over dynamic?它给你编译检查 -
dynamic 比较慢,因为它每次都进行运行时绑定。
-
有一个非常简单的酸性测试可用。如果您在泛型方法中使用 switch() 或 typeof() ,那么它不应该是泛型的可能性很大。动态方法的简洁性是另一个优势。
-
@HansPassant typeof() 本身没问题。想想在字典中缓存。
-
你的 dynamicFun 应该返回对象,而不是动态的。 dynamicFun 不使用动态的任何特性。让调用者决定是否要使用动态。
标签: c# .net function generics dynamic