typeof(T)vs <T>

Nic*_*uso 6 .net generics typeof

在.NET中,似乎有两种方法可以将类型传递给方法或类.第一种是通过泛型,我们将类型作为特殊参数传递.

如:

var list = new List<MyClass>();
Run Code Online (Sandbox Code Playgroud)

另一种方法是明确使用typeof运算符,例如:

var pe = Expression.ParameterExpression(typeof(MyClass), "myinstance");
Run Code Online (Sandbox Code Playgroud)

我的问题是关于需要类型参数的方法的统一接口的差异.为什么上述陈述不能如下做?:

var pe = Expression.ParameterExpression<MyClass>("myinstance");
Run Code Online (Sandbox Code Playgroud)

是因为编译器的行为方式需要两个语义差异吗?当编译器处理泛型参数时,它只是执行替换ala lambda演算吗?尽管typeof风格方法要求的实际实例Type类来推断属性和特性?

谢谢.

Cha*_*ion 6

第一种方法允许您在运行时计算所需的类型.

Expression.ParameterExpression(CalculateType(), "myinstance");
Run Code Online (Sandbox Code Playgroud)

就个人而言,我不介意看到一个重载,肯定会使编译时定义的类型的代码更清晰.