zoukankan      html  css  js  c++  java
  • .net反射调用值类型引用参数时的处理办法(转)

    int.Parse 方法,大家都用过吧?下

    下面用它来做测试

                //int.TryParse( string s, out int result );
                var intTryParse = typeof(int).GetMethod("TryParse",
                    BindingFlags.Public | BindingFlags.Static,
                    Type.DefaultBinder,
                    new Type[] { typeof(string), typeof(int).MakeByRefType() },
                    new ParameterModifier[] { new ParameterModifier(2) }
                    );

    如果我们按照引用参数类型的调用结构来调用的法,就有了如下类似的代码:

    int nVal = 0;
    bool success = ( bool ) intTryParse.Invoke(null, new object[] { "123456", nVal });

    运行结果肯定是 nVal 的值保持为0。

    因为把 nVal 放入 object[] 时,是值拷贝,这样我们根本获取不到值。

    所以我们要用下面类似的写法:

                var parameters = new object[] { "123456", 0 };
                bool success = (bool)intTryParse.Invoke(null, parameters );
                if (success)
                {
                    int nVal = ( int ) parameters[1];
                }

    这样,就OK了~~

    反射,就是如此简单

  • 相关阅读:
    扑克牌顺子
    多任务Multitask Learning
    智能指针
    左旋转字符串
    和为s的两个数字
    07.极简主义读后感
    06.极简主义——汇流(笔记)
    05.极简主义——奉献(笔记)
    04.极简主义——热情(笔记)
    03.极简主义——人际关系(笔记)
  • 原文地址:https://www.cnblogs.com/Yjianyong/p/1829318.html
Copyright © 2011-2022 走看看