C# 中out,ref,params参数的使用
- 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值,不限类型。
- 在使用out参数的时候需要注意:
- 在调用方法之前,对out参数传递的变量只需声明,可以赋值也可以不赋值,赋值也会在方法中被覆盖掉。
- 方法使用了out参数传递变量时,就是要返回值,所以必须在方法内为其赋值。
- 方法的参数使用out关键字修饰时,在调用该方法时,也要在out参数传递的变量前面加上out关键字才行。
static void Main(string[] args)
{
// 使用out参数返回一个数组的最大值、最小值
int[] nums = { , , , , , , , , };
int max;
int min;
GetMaxMinSumAvg(nums, out max, out min);
Console.WriteLine(max);
Console.WriteLine(min);
Console.ReadKey();
} public static void GetMaxMinSumAvg(int[] nums, out int max, out int min)
{
max = ; // out参数传递的变量必须在方法内为其赋值
min = ;
if(nums.Length > )
{
for (int i =; i < nums.Length; i++)
{
if (nums[i] > max)
max = nums[i];
if (nums[i] < min)
min = nums[i];
}
}
}
- TryParse类型转换就使用out参数返回转换结果值:
Boolean int.TryParse(string s, out int result) // 将字符串转换为int类型,out传递的变量result为转换结果(若转换失败返回result为0)方法return Boolean 类型
自定义int.TryParse()方法
public static Boolean stringToInt(string s, out int result) {
try
{
result = Convert.ToInt32(s);
return true;
}
catch {
result = ;
return false;
}
}
2、 ref参数
- ref 关键字,和out一样,可以使得参数通过引用来传递。换句话说,ref能够让你直接对原来那个数进行操作,而不是将原数复制一份,对那个复制项进行操作。
- ref参数的作用:
- 与out不同的是,它可以双向传值,主要适用于场景内部对外部的值进行改变的情况。换句话说,ref参数侧重于将一个已经初始化了的变量以参数的形式带到一个方法中进行改变,改变完成后,再将改变后的值带出来。
- ref的作用主要是让值类型或string这种特殊类型的引用类型能够像其他引用类型一样在方法中进行了值的改变,在方法结束之后,能够将值保存下来。
- 在使用ref参数需要注意:
- ref参数传递的变量在传递之前一定要对其进行初始化赋值。
- 方法的参数使用ref关键字修饰时,在调用该方法时,也要在out参数传递的变量前面加上ref关键字才行。
- 方法使用了ref参数传递变量时,不同于out,没有要求一定在方法中对ref所修饰的变量进行赋值,所以可以不赋值。
static void Main(string[] args)
{
int count = ; // ref修饰的变量,必须对其赋初值
Add(ref count);
Console.WriteLine(count);
Console.ReadKey();
} public static void Add(ref int i){
i += ; // 不一定要赋值
}
params 关键字可以使得在参数个数可变处采用参数的数组型参数,比如 int sum(params int[] values)。
可变参数的作用:使得个数不确定的可变参数以数组的形式传递,适合于方法的参数个数未知的情况时,用于传递大量的数组集合参数。
可变参数在使用时需注意:
不允许将params修饰符与ref和out修饰符组合起来使用。
当方法的参数列表中有多个参数时,params修饰的参数必须放在最后,不能放在前面,以免程序不好确定参数究竟有多少个而报错。比如:
int Sum(int initial, params int[] arr)
一个方法当然可以包含可变参数和不变参数,两个可以同时使用。
public static int Sum(int initial, params int[] arr){
int sum = initial;
for(int i = ; i < arr.Length; i++)
sum+=arr[i];
}
return sum;
}
C# 中out,ref,params参数的使用的更多相关文章
- params参数的调用
namespace params参数的用法 { class Program { public static void Test(string name,params int[] score) { ; ...
- c#中的ref、out、params参数
out参数 与c++的引用的对比 out参数可以用来传递方法返回值,与c++中的引用有点像,但是还有有些不同: - 调用方法的时候必须写out参数 - 调用方法之前必须先分配空间 - 调用方法之前不用 ...
- out参数,ref参数,params参数数组
params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参 ...
- C#中in,out,ref,params的作用和区别
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键 ...
- 【又长见识了】函数传参,params参数,ref和out参数详解
一.原来函数这样传参 先看一个函数和函数调用. static void Main(string[] args) { ; Test(num);//局部变量在使用之前赋值 //Test(10); //直接 ...
- c#中的Out, params,ref 细说并沉淀
1. Out,params,ref之前先记录平时用的最多的按值传递参数的情况,当然默认情况下参数传入函数的默认行为也是按值传递的. 1: //默认情况下参数会按照值传递 2: static int a ...
- C#中的ref与out参数(本文仅作为个人笔记)
假如一个方法的参数(形参)是引用类型,那么使用那个参数来进行的任何修改都会改变参数引用的数据.但这里的关键在于,虽然引用的数据发生了变化,但参数本生没有改变——它仍然引用的是一个对象.换句话说,虽然可 ...
- axios中get请求的params参数中带数组的处理方法
axios中get请求的params参数中带数组时导致向后台传参失败报错:from origin 'http://localhost:8080' has been blocked by CORS po ...
- pytest--fixture基本使用(主要用来进行测试环境的初始化和清理,fixture中的params参数还可以用来进行参数化)
fixture fixture修饰器来标记固定的工厂函数,在其他函数,模块,类或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作. 方法: fixture(scope=" ...
随机推荐
- 彻底关闭win10的自动更新,一定要坚持看到最后一页
https://jingyan.baidu.com/article/9faa7231e7b78b473c28cbb6.html 是否好使我还在测试,不好使的话,再跟新 2018-05-20 今天电脑又 ...
- centos 6.5 安装mysql
步骤1: yum -y install mysql-server 步骤2: chkconfig mysqld on 步骤3: service mysqld start mysql -u root se ...
- android 混淆文件proguard.cfg详解 (转载)
-injars androidtest.jar[jar包所在地址] -outjars out[输出地址] -libraryjars 'D:\android-sdk-windows\platf ...
- MySQL之练习题5
.将所有的课程的名称以及对应的任课老师姓名打印出来,如下: SELECT cname,tname FROM course INNER JOIN teacher WHERE course.teacher ...
- 2018.10.18 bzoj1185: [HNOI2007]最小矩形覆盖(旋转卡壳)
传送门 不难看出最后的矩形一定有一条边与凸包某条边重合. 因此先求出凸包,然后旋转卡壳求出当前最小矩形面积更新答案. 代码: #include<bits/stdc++.h> #define ...
- 2018.09.15 poj2117Electricity(割点)
传送门 其实求一个图删除一个点之后,联通块最多有多少. 直接tarjan求割点更新答案就行了. 但注意原图不一定连通. 代码: #include<iostream> #include< ...
- Md5 util
Md5PasswordEncoder.java http://docs.spring.io/spring-security/site/docs/3.0.x/apidocs/org/springfram ...
- 201709012工作日记--Android消息机制
1. android的消息机制——Handler机制 参考:http://www.jianshu.com/p/9e4d1fab0f36. Android异步消息处理机制完全解析,带你从源码的角度理解: ...
- (二分匹配 模板 KM)奔小康赚大钱--hdu--2255
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2255 代码: #include <iostream> #include <cstdio ...
- PHP 7 安装 Memcache 和 Memcached 总结
Memcache 与 Memcached 的区别 Memcached 是 Memcache 的升级版,优化了 Memcache,并增加了一些操作方法.所以现在基本都是用最近版本的. PHP 7 下安装 ...