params
在学习Task.WhenAll的过程中发现该keyword
翻译:n. 参数; 参数个数
MSDN:https://msdn.microsoft.com/zh-cn/library/w5zay9db
MSDN解释:
1.使用 params 关键字可以指定采用数目可变的参数的方法参数。
2.可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组。 还可以不发送参数。 如果未发送任何参数,则 params 列表的长度为零。
3.在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字
MSDN解释分析:
1.是用途,2和3是解释怎么使用
提炼关键字有:
指定类型、
逗号分隔、
没有参数(MSDN把传参叫做发送参数,,,,)、
被修饰的参数是最后一个参数、
一个方法仅能有一个该keyword
Demo
static void TryUseParams()
{
TryUseParams("我在尝试发送5个参数", 1,2,3,4,5);
TryUseParams("我在尝试发送2个参数", 33,2);
}
static void TryUseParams(string title,params int[] array)
{
if (array.Length != 0)
{
Console.WriteLine("Start Print {0}!", title);
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(i);
}
}
}
Case
public static Task WhenAll(params Task[] tasks);
public static Task WhenAny(params Task[] tasks);
最常用的public static void WriteLine(string format, params object[] arg)居然就这样实现的
尝试自己去实现WriteLine()
static void UseMyWriteLine()
{
OverrideWeiteLine("{0}我尝试{1}我自己实现的---{2}---", 2, "自己", "WriteLine");
}
static void OverrideWeiteLine(string stringFormat, params object[] arg)
{
var stringBuilder = new StringBuilder();
for (int i = 0; i < arg.Length; i++)
{
stringBuilder.AppendFormat(stringFormat, arg[i]);
}
Console.WriteLine(stringBuilder.ToString());
}
这样的实现并没有成功,在没有实现成功的情况下,想如果能看到源码就好了,查到原来可以做到
https://referencesource.microsoft.com/#q=console.writeline
深入几层发现Console.WriteLine封装中调用string.Format(stringFormat, arg)来实现