C# 中的 JavaScript 传播语法

标签 javascript c# spread-syntax

在 C# 中是否有类似 JavaScript's spread syntax 的实现? ?

var arr = new []{
   "1",
   "2"//...
};

Console.WriteLine(...arr);

最佳答案

没有传播选项。这是有原因的。

  1. 方法参数不是 C# 中的数组,除非您使用 params 关键字
  2. 使用 param 关键字的方法参数必须:
    1. 同类型
    2. 有一个可转换的共享类型,例如用于数字的 double
    3. 属于 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/

相关文章:

javascript - 用户注销时 Google signInCallback 调用两次

javascript - 防止以 overflow hidden 区域的焦点输入为中心

javascript - Angular 2 输出和事件发射器不发射

c# - Linqpad查询错误

javascript - 合并来自具有相同键的不同对象的数组

javascript - 如何让我的测试在 Jest 中挂起?

c# - 强制 session 开始

c# - 为什么我当前添加的列表框项目不可访问?

javascript - ESLint 解析错误 : Unexpected token . .. 仅在一个剩余运算符上

javascript - 将扩展语法与函数 Arguments 对象一起使用