• C#:方法参数之--输出参数(out)


    输出参数:方法声明时,使用out修饰符声明的形参,称为输出参数;

    • 类似于引用参数(ref),输出参数也不创建新的存储位置(副本)
    • 输出参数表示的存储位置就是实参所表示的储存位置
    • 传递给输出参数的实参,在方法调用前不需要强制初始化,在方法内使用到该形参时,需要强制赋值一次。

    下面展示double类型的tryParse()方法 它就是一个含有输出参数的方法

    Console.WriteLine("请输入:");
    var inputStr = Console.ReadLine();
    double targetValue;
    var parser_result = double.TryParse(inputStr,out targetValue);
    if (parser_result)
    {
        Console.WriteLine(targetValue);
    }
    else
    {
        Console.WriteLine("转换失败--{0}",targetValue);
    }
    

    自己定义一个类似TryParse()的方法

    定义ParseToDouble(object inputStr, out double parseResult)方法

    static bool ParseToDouble(object inputStr, out double parseResult)
    {
        parseResult = 0;
        try
        {
            parseResult = Convert.ToDouble(inputStr);
            return true;
        }
        catch
        {
            return false;
        }
    }
    

    在Main方法中调用该方法

    var inputStr = Console.ReadLine();
    double targetValue;
    Console.WriteLine("请再次输入:");
    inputStr = Console.ReadLine();
    var parseResult = ParseToDouble(inputStr, out targetValue);
    if (parseResult)
    {
        Console.WriteLine(targetValue);
    }
    else
    {
        Console.WriteLine("转换失败--{0}",targetValue);
    }
    

    以上展示了输出参数为值类型时,方法是如何定义以及如何调用的

    输出参数为引用类型时的示例

    class Student
    {
        public int Age { get; set; }
        public string StuName { get; set; }
    
        static bool CanCreateStudent(int age, string name, out Student stu)
        {
            stu = null;
            if (age < 7 || age > 80)
            {
                return false;
            }
            if (string.IsNullOrWhiteSpace(name))
            {
                return false;
            }
            stu = new Student() { Age = age, StuName = name };
            return true;
        }
    }
    

    在Mian方法中调用

    //待创建的stu对象
    Student student;
    var can_create = Student.CanCreateStudent(1,"",out student);
    if (can_create)
    {
        Console.WriteLine(student.Age+"--"+student.StuName);
    }
    else
    {
        Console.WriteLine("不满足创建Student对象的条件");//输出:不满足创建Student对象的条件
    }
    
    Student student1;
    var can_create_1 = Student.CanCreateStudent(12, "bigboss", out student1);
    if (can_create_1)
    {
        Console.WriteLine(student1.Age + "--" + student1.StuName);//输出:12--bigboss
    }
    else
    {
        Console.WriteLine("不满足创建Student对象的条件");
    }
    

    以上便是对 out参数的总结,相较ref参数而言,out参数使用场景更多。它给予我们的方法"拥有多个返回值的能力";记录下来out参数的知识点,以便以后查阅

  • 相关阅读:
    面向对象(接口 ,多态)
    面向对象(继承,重写,this,super,抽象类)
    IO(字符流 字符缓冲流)
    ArrayList集合
    字符串常用API
    面向对象(类,封装,this,构造方法)
    不同类型问题代码训练
    java中的方法
    04慕课网《进击Node.js基础(一)》HTTP讲解
    《JavaScript设计模式与开发实践》——第3章 闭包和高阶函数
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/13748603.html
Copyright © 2020-2023  润新知