在 C# 中是否有类似 JavaScript's spread syntax 的实现? ?
var arr = new []{
"1",
"2"//...
};
Console.WriteLine(...arr);
最佳答案
没有传播选项。这是有原因的。
- 方法参数不是 C# 中的数组,除非您使用 params 关键字
- 使用 param 关键字的方法参数必须:
- 同类型
- 有一个可转换的共享类型,例如用于数字的 double
- 属于 object[] 类型(因为 object 是所有事物的根类型)
不过,话虽如此,您可以获得具有各种语言特性的类似功能。
回答你的例子:
C#
var arr = new []{
"1",
"2"//...
};
Console.WriteLine(string.Join(", ", arr));
您提供的链接有这个例子:
Javascript 传播
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
// expected output: 6
console.log(sum.apply(null, numbers));
参数 在 C# 中,具有相同的类型
public int Sum(params int[] values)
{
return values.Sum(); // Using linq here shows part of why this doesn't make sense.
}
var numbers = new int[] {1,2,3};
Console.WriteLine(Sum(numbers));
在 C# 中,对于不同的数字类型,使用 double
public int Sum(params double[] values)
{
return values.Sum(); // Using linq here shows part of why this doesn't make sense.
}
var numbers = new double[] {1.5, 2.0, 3.0}; // Double usually doesn't have precision issues with small whole numbers
Console.WriteLine(Sum(numbers));
反射 在 C# 中,对于不同的数字类型,使用对象和反射,这可能是最接近您要求的。
using System;
using System.Reflection;
namespace ReflectionExample
{
class Program
{
static void Main(string[] args)
{
var paramSet = new object[] { 1, 2.0, 3L };
var mi = typeof(Program).GetMethod("Sum", BindingFlags.Public | BindingFlags.Static);
Console.WriteLine(mi.Invoke(null, paramSet));
}
public static int Sum(int x, double y, long z)
{
return x + (int)y + (int)z;
}
}
}
关于C# 中的 JavaScript 传播语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39886700/