在C#中是否有类似JavaScript's spread syntax的实现?
var arr = new []{"Hello", "World"};
Console.WriteLine(...arr);
字符串
第三方编辑
使用一种方法
public void greet(string salutation, string recipient)
{
Console.WriteLine(salutation + " " + recipient);
}
// instead of this
greet(arr[0], arr[1]);
// the spread syntax in javascript allows this
greet(...arr);
型
6条答案
按热度按时间kxkpmulp1#
没有利差的选择,这是有原因的。
1.方法参数在C#中不是数组,除非使用params关键字
1.使用param关键字的方法参数必须是:
1.共享同一类型
1.具有可铸造的共享类型,例如用于数字的double
1.类型为object[](因为object是所有事物的根类型)
然而,话虽如此,您可以通过各种语言功能获得类似的功能。
举你的例子:
C#
字符串
你提供的链接有这个例子:
JavaScript Spread
型
Params在C#中,同类型
型
在C#中,使用不同的数字类型,使用double
型
反射在C#中,使用不同的数值类型,使用对象和反射,这可能是最接近你所要求的。
型
c86crjj02#
获得类似行为(没有反射)的一个技巧是接受
params SomeObject[][]
,并定义一个从SomeObject
到SomeObject[]
的隐式运算符。现在您可以传递SomeObject
和单个SomeObject
元素的数组的混合。字符串
krugob8w3#
C#12引入了类似于JavaScript的spread操作符。
我们可以写
字符串
w8biq8rn4#
C#中没有直接的预构建库来处理Spread中构建的内容
为了在C#中获得该功能,您需要反射对象并通过其访问修饰符获得方法,属性或字段。
你会做这样的事情:
字符串
然后遍历并将它们扔到动态对象中:
型
https://www.oreilly.com/learning/building-c-objects-dynamically
rkttyhzu5#
我来这里寻找
numbers[ 1 .. 4]
中的C#范围运算符字符串
在linqpad中,它看起来像这样
的数据
rta7y2nd6#
您还可以执行以下操作
字符串
将打印4
如果你想实现列表或数组的初始化,