在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢?

out 当需要返回一系列返回值时可用out高级参数,必须在调用函数内赋值。

ref 不需要返回值的情况下改变变量值,必须在调用函数外部赋值。

举例说明:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Wolfy.RefAndOut
{
class Program
{
static void Main(string[] args)
{
int[] arr = { , , , , , , , , };
float avg;//在使用out关键字时,不需要在此处初始化,初始化也不会影响到方法内部的值,所以你初始化没用
int max;
int min;
int sum = GetIntResult(arr, out avg, out max, out min);
Console.WriteLine("和:{0}\t平均值:{1}\t最大值:{2}\t最小值:{3}", sum, avg, max, min);
Console.Read();
}
static int GetIntResult(int[] arry, out float avg, out int max, out int min)
{
int sum = ;
max = arry[];
min = arry[];//使用out关键字时,必须在离开方法前对out关键字修饰的参数初始化
for (int i = ; i < arry.Length; i++)
{
sum += arry[i]; if (max < arry[i])
{
max = arry[i];
}
if (min > arry[i])
{
min = arry[i];
}
}
avg = sum / arry.Length;
return sum;
}
}
}
static int GetIntResult(int[] arry, ref float avg, ref int max, ref int min)
{
int sum = ;
max = arry[];
min = arry[];
for (int i = ; i < arry.Length; i++)
{
sum += arry[i]; if (max < arry[i])
{
max = arry[i];
}
if (min > arry[i])
{
min = arry[i];
}
}
avg = sum / arry.Length;
return sum;
}

结果均为:

高级参数params

(1)、使用 params关键字可以指定一个方法参数,该方法参数的数目可变。

(2)、可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组。 还可以不发送参数。 如果未发送任何参数,则 params 列表的长度为零。

(3)、在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

static void Main(string[] args)
{
int[] myIntArray = { , , , , };
UseParam1(myIntArray); object[] myObjArray = { , 'b', "test", "again" };
UseParam2(myObjArray);
}
static void UseParam1(params int[] args) {
for (int i = ; i < args.Length; i++)
{
Console.WriteLine(args[i] + "...");
}
} static void UseParam2(params object[] objs)
{
for (int i = ; i < objs.Length; i++)
{
Console.WriteLine(objs[i] + " ");
}
}

结果

最新文章

  1. 解读ASP.NET 5 &amp; MVC6系列(16):自定义View视图文件查找逻辑
  2. css居中完全指南(翻译)
  3. JavaScript Array对象 知识点总结
  4. 注册、启动、停止windows服务
  5. Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
  6. JAX-WS:背后的技术JAXB及传递Map
  7. 关于更新到Xcode8的一些问题
  8. Android自学学习资料
  9. OSError: [Errno 13] Permission denied: '/etc/cron.d/1sandbox_registration'
  10. C#基础——数组(冒泡排序)
  11. canvas 3D雪花效果
  12. RabbitMQ 笔记-基本概念
  13. github 用git bash上传项目 最后提示 Everything up-to-date 但没传上去
  14. 遍历tr通过name获取对应值用作判断或者赋值
  15. yii2-redis 扩展详解
  16. python的相关基本操作
  17. Sublime Text shift+ctrl 妙用
  18. 【洛谷4719】 动态dp(树链剖分,dp,矩阵乘法)
  19. mysql+mycat分片环境部署
  20. Web验证方式(1)--Http Basic Authentication

热门文章

  1. Mysql 基本操作指令+增删查改
  2. python--函数程序分析
  3. MVC入门——删除页
  4. HDU 4622 Reincarnation 后缀自动机 // BKDRHash(最优hash)
  5. 【BZOJ3041】水叮当的舞步 迭代深搜IDA*
  6. 九度OJ 1132:与7无关的数 (数字特性)
  7. SPDY: An experimental protocol for a faster web HTTP/2
  8. C#实现(递归和非递归)高速排序和简单排序等一系列排序算法
  9. 收集Oracle数据库中的SQL基线信息(一)基础信息收集
  10. window上安装rabbitMQ