zoukankan      html  css  js  c++  java
  • 探讨C#的out关键字

    以下两个方法有什么区别?
    <pre>
    static void Split(ArrayList source, ArrayList result1,
                    ArrayList result2)
    {
        if (source == null)
        {
            result1 = null;
            result2 = null;

            return;
        }

        result1.Add(null);
        result2.Add(null);
    }

    static void Split2(ArrayList source, out ArrayList result1,
                    out ArrayList result2)
    {
        if (source == null)
        {
            result1 = null;
            result2 = null;

            return;
        }

        result1.Add(null);
        result2.Add(null);
    }
    </pre>
    想知道答案请看下文······

    Split()与Split2()两个方法主体没有任何区别,只是方法Split2()的最后两个参数为out参数导致无法编译,编译器提示以下信息:

    错 误    1    使用了未赋值的 out 参数“result1”    F:\Documents and Settings\linhen\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs    33    13    ConsoleApplication1
    错 误    2    使用了未赋值的 out 参数“result2”    F:\Documents and Settings\linhen\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs    34    13    ConsoleApplication1
    错 误    3    控制离开当前方法之前必须对 out 参数“result1”赋值    F:\Documents and Settings\linhen\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs    23    21    ConsoleApplication1
    错 误    4    控制离开当前方法之前必须对 out 参数“result2”赋值    F:\Documents and Settings\linhen\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs    23    21    ConsoleApplication1

    错误1、2是由于out 参数的值不会传递到 out 参数,所以必须在方法内部进行初始化。错误3、4则是由于在方法返回之前必须为 out 参数赋值。
  • 相关阅读:
    用call/apply实现bind
    FED1 修改 this 指向(中等)
    46. 全排列(中等)
    JavaScript 用七种方式教你判断一个变量是否为数组类型(转)
    179. 最大数(中等)
    125. 验证回文串(简单)
    执行git pull命令时出错
    前端修改滚动条样式
    js实现每日定时任务
    Vue实现验证码控件
  • 原文地址:https://www.cnblogs.com/SamZhang/p/814639.html
Copyright © 2011-2022 走看看