Pra*_*ter 6 c# compiler-construction generics parameters
以下代码示例打印:
T
T[]
T[]
Run Code Online (Sandbox Code Playgroud)
虽然前两行是预期的,为什么编译器为常规数组选择了param数组?
public class A
{
public void Print<T>(T t)
{
Console.WriteLine("T");
}
public void Print<T>(params T[] t)
{
Console.WriteLine("T[]");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
a.Print("string");
a.Print("string","string");
a.Print(new string[] {"a","b"});
}
}
Run Code Online (Sandbox Code Playgroud)
aru*_*rul 10
在引擎盖下
a.Print("string","string");
Run Code Online (Sandbox Code Playgroud)
只是语法糖
a.Print(new string[]{"string","string"});
Run Code Online (Sandbox Code Playgroud)
编辑:就像我说的,params关键字只为你自动创建数组,你告诉编译器:要么T直接接受数组,要么使用X输入参数来构造该数组.
除了其他人所说的,params关键字还会导致ParamArrayAttribute为生成的数组参数.所以这...
public void Print<T>(params T[] t) { }
Run Code Online (Sandbox Code Playgroud)
由编译器生成为...
public void Print<T>([ParamArray] T[] t); { }
Run Code Online (Sandbox Code Playgroud)
正是该属性向编译器和IDE指示可以使用更简单的语法调用该方法...
a.Print("string", "string");
Run Code Online (Sandbox Code Playgroud)
而不是...
a.Print(new string[] { "string", "string" });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |