转换和拆箱有什么区别?

Jas*_*ker 6 .net linq dynamic-language-runtime expression-trees .net-3.5

在DLR的LINQ表达式中,有什么区别:

Expression.Convert(SomeVariableExpression, typeof(T));
Run Code Online (Sandbox Code Playgroud)

还有这个:

Expression.Unbox(SomeVariableExpression, typeof(T));
Run Code Online (Sandbox Code Playgroud)

关于这个的文档似乎有点粗略.

更重要的是,其中一个等同于这个C#代码:

(ClassA)InstanceOfClassB
Run Code Online (Sandbox Code Playgroud)

ClassB有一个隐式或显式运算符强制转换为ClassA?

And*_*are 3

主要区别在于,Epression.Unbox仅需要从堆中显式拆箱值类型。 Expression.Convert是您想要用来挂钩用户定义的转换(无论是隐式还是显式)的方法。

Expression.Convert

如果 expression.Type 或 type 是定义隐式或显式转换运算符的用户定义类型,则MethodInfo表示该运算符的 是实现方法。

并且:

如果 expression.Type 或 type 是引用类型,并且存在从 expression.Type 到 type 的显式装箱、拆箱或引用转换,则实现方法为 null。