Ownsight

?找回密码
?立即注册
搜索
热搜: 活动 交友 discuz
查看: 1080|回复: 0
打印 上一主题 下一主题

c# params

[复制链接]

803

主题

903

帖子

3201

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3201
跳转到指定楼层
楼主
发表于 2016-6-7 07:12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MSDN上是这么解释的:
params 关键字可以指定在参数数目可变处采用参数的方法参数。

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

示例
??复制代码
// cs_params.cs
using System;
public class MyClass
{

? ? public static void UseParams(params int[] list)
? ? {
? ?? ???for (int i = 0 ; i < list.Length; i++)
? ?? ???{
? ?? ?? ?? ?Console.WriteLine(list[i]);
? ?? ???}
? ?? ???Console.WriteLine();
? ? }

? ? public static void UseParams2(params object[] list)
? ? {
? ?? ???for (int i = 0 ; i < list.Length; i++)
? ?? ???{
? ?? ?? ?? ?Console.WriteLine(list[i]);
? ?? ???}
? ?? ???Console.WriteLine();
? ? }

? ? static void Main()
? ? {
? ?? ???UseParams(1, 2, 3);
? ?? ???UseParams2(1, 'a', "test");

? ?? ???// An array of objects can also be passed, as long as
? ?? ???// the array type matches the method being called.
? ?? ???int[] myarray = new int[3] {10,11,12};
? ?? ???UseParams(myarray);
? ? }
}


输出
??
1
2
3

1
a
test

10
11
12
基本信息可以总结为:
一个函数中只能一个且是最后一个;
必须是一维数组;

我的疑问就是既然是一维数组,如上述代码所示,无论是单独写入多个同类型的数值,还是创建一个一维数组并显示都是一个效果,那么两个真的一样么?
下面是测试代码

string sr = "";
? ?? ???private void dtest(params object[] obj)
? ?? ???{

? ?? ?? ?? ?for (int i = 0; i < obj.Length; i++)
? ?? ?? ?? ?{
? ?? ?? ?? ?? ? sr += obj[i].ToString()+"\r\n";
? ?? ?? ?? ?}

? ?? ?? ?? ?sr += "------------\r\n";
? ?? ???}
? ?? ???private void btest_Click(object sender, EventArgs e)
? ?? ???{
? ?? ?? ?? ?sr = "";

? ?? ?? ?? ?dtest(1, 2, 3);
? ?? ?? ?? ?dtest(1, 'a', "test");

? ?? ?? ?? ?int[] myarray = new int[3] { 10, 11, 12 };
? ?? ?? ?? ?dtest(myarray);
? ?? ?? ?? ?dtest(myarray,new object[] {1111,222});
? ?? ?? ?? ?dtest(myarray, 1, 2, "c", "d");
? ?? ?? ?? ?tbb.Text = sr;
? ?? ???}
最终sr的显示结果是:
1
2
3
------------
1
a
test
------------
System.Int32[]
------------
System.Int32[]
System.Object[]
------------
System.Int32[]
1
2
c
d
------------

作为单个元素,或者,一维数组作为参数,在示例中看不出什么,可是,在实际上还是有出入的,无论用什么进行传递,每个参数都是一个整体


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表