数组作为参数隐式转换

时间:2018-03-23 20:25:57

标签: c# arrays

在这三种情况下初始化数组是正确的

string[] To = { "one@g.com", "two@g.com" };
string[] To = new[] { "one@g.com", "two@g.com" };
string[] To = new string[] { "one@g.com", "two@g.com" };

但是当使用它作为参数时,第一个选项无效 所以这是有效的

MethodWithAnArrayParam(new string[] { "hi@t.com", "hi@t.com" });
MethodWithAnArrayParam(new [] { "hi@t.com", "hi@t.com" });

这会产生错误

   MethodWithAnArrayParam({ "hi@t.com", "hi@t.com" });

为什么?

2 个答案:

答案 0 :(得分:2)

使用关键字new

进行排列声明

试试这个

string TO = new string[]{ "one@g.com", "two@g.com" };

您也可以使用通用数组

var TO = new[]{ "one@g.com", "two@g.com" };

根据给定的值自动自动给出相同的数据类型:

new [] { "Hello "," World "} string array
new [] {0, 1, 2} int array
...

所有这些都是无效的,因为在任何时候你都告诉编译器它是一个数组,因为{}有几种不同的用途

emailProvider.Send("hello", { "one@g.com", "two@g.com" }, null, "subject");

emailProvider.Send("hello", (new string[] { "hi@t.com", "hi@t.com" }), null, "subject"); 

您不能创建没有阴影的语句,也不能在参数的位置创建未分配的语句

bool Send(string message, string[] to, string[] bccTo, string subject);

答案 1 :(得分:1)

尝试使用:

new[]{ "one@g.com", "two@g.com" }

编辑:或者您可以使用

new string[]{ "one@g.com", "two@g.com" }

请参阅:Implicit Typed Arrays