private string[] GetRoles()
{
string[] foo = {"Test"};
return foo;
}
上述代码可以编译,但是......
private string[] GetRoles()
{
return {"Test"};
}
不行。
替换为:
return new string[] { "Test" };
显然,它会编译通过。这是不一致的吗?还是我太蠢了,或者我错了:S。
归功于@Luke:
第一个示例只是简写数组初始化语法。第二个示例根本不是合法的C#语法。
object[]
:它根本不是合法的 C# 语法。 - LukeHreturn new string[]{"Test"};
给出正确的返回类型。
您的代码片段之所以不起作用,与下面的代码不能正常工作(即无法编译)的原因相同。
private string[] GetRoles()
{
//string[] foo = {"Test"};
var foo = {"Test"};
return foo;
}
string[]
提供了足够的信息给编译器,使得这个语法糖可以正常工作。历史上,您必须编写new
运算符。像这样:
string[] foo = new string[] {"Test"};
我认为在C# 2.0中,可以省略new
运算符,直接写:
string[] foo = {"Test"};
编译器可以确定您正在初始化数组的位置。我认为我同意您的看法,这是一种不一致性。当添加省略new
运算符的可能性时,他们可能忘记了返回语句,因为很少返回在返回语句中初始化的数组。因为当编译器查看返回类型时,它应该能够像赋值的情况一样找出来。
个人而言,我从不省略new
运算符,所以我甚至从未考虑过这个问题 :)
private string[] GetRoles()
{
string[] foo = {"Test"};
return foo;
}
private string[] GetRoles()
{
return {"Test"};
}
return new [] { "Test" };
也可以正常工作。 - Benjamin Podszun