作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码适用于 .NET4:
class Program
{
static void Main( string[] args )
{
var fooExpr = Expression.Parameter( typeof( Foo ), "f" );
var parmExpr = Expression.Parameter( typeof( int ).MakeByRefType(), "i" );
var method = typeof( Foo ).GetMethod( "Method1" );
var invokeExpr = Expression.Call( fooExpr, method, parmExpr );
var delegateType = MakeDelegateType( typeof( void ), new[] { typeof( Foo ), typeof( int ).MakeByRefType() } );
var lambdaExpr = Expression.Lambda( delegateType, invokeExpr, fooExpr, parmExpr );
dynamic func = lambdaExpr.Compile();
int x = 4;
func( new Foo(), ref x );
Console.WriteLine( x );
}
private static Type MakeDelegateType( Type returnType, params Type[] parmTypes )
{
return Expression.GetDelegateType( parmTypes.Concat( new[] { returnType } ).ToArray() );
}
}
class Foo
{
public void Method1( ref int x )
{
x = 8;
}
}
class Program
{
static void Main( string[] args )
{
var fooExpr = Expression.Parameter( typeof( Foo ), "f" );
var parmExpr = Expression.Parameter( typeof( int ).MakeByRefType(), "i" );
var method = typeof( Foo ).GetMethod( "Method1" );
var invokeExpr = Expression.Call( fooExpr, method, parmExpr );
var delegateType = MakeDelegateType( typeof( void ), new[] { typeof( Foo ), typeof( int ).MakeByRefType() } );
var lambdaExpr = Expression.Lambda( delegateType, invokeExpr, fooExpr, parmExpr );
dynamic func = lambdaExpr.Compile();
int x = 4;
func( new Foo(), out x );
Console.WriteLine( x );
}
private static Type MakeDelegateType( Type returnType, params Type[] parmTypes )
{
return Expression.GetDelegateType( parmTypes.Concat( new[] { returnType } ).ToArray() );
}
}
class Foo
{
public void Method1( out int x )
{
x = 8;
}
}
最佳答案
A 引用 参数将由 CLR 管理一个经典变量,如果这个变量是一个值,它将只是 Box(封装到一个对象中以通过引用传递元素)。
出 允许有多个输出,并且在编译过程中会产生更大的影响。
表达式在运行时编译,但在编译时检查“out”有效性。
通过有效性,我的意思是编译器确保方法 将分配 值到 出 范围。
关于.net - 表达式树 : invoking a method with out or ref arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075460/
我是一名优秀的程序员,十分优秀!