Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript spread syntax in C#

Is there any implementation in C# like JavaScript's spread syntax?

var arr = new []{    "1",    "2"//... };  Console.WriteLine(...arr); 
like image 967
jmvtrinidad Avatar asked Oct 06 '16 02:10

jmvtrinidad


People also ask

What is spread syntax in JavaScript?

Spread syntax ( ... ) allows an iterable, such as an array or string, to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected.

What is JavaScript spread operator?

The JavaScript spread operator ( ... ) allows us to quickly copy all or part of an existing array or object into another array or object.

What is spread parameter in JavaScript?

Summary. The spread operator allows us to spread the value of an array (or any iterable) across zero or more arguments in a function or elements in an array (or any iterable). The rest parameter allows us to pass an indefinite number of parameters to a function and access them in an array.

Does C# have spread operator?

There isn't a spread option.


1 Answers

There isn't a spread option. And there are reasons.

  1. Properties aren't an array in C# unless you use the params keyword
  2. Properties that use the param keyword would have to either:
    1. Share the same type
    2. Have a castable shared type such as double for numerics
    3. Be of type object[] (as object is the root type of everything)

However, having said that, you can get similar functionality with various language features.

Answering your example:

C#

var arr = new []{    "1",    "2"//... };  Console.WriteLine(string.Join(", ", arr)); 

The link you provide has this example:

Javascript Spread

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)); 

Params In C#, with same type

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)); 

In C#, with different numeric types, using 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)); 

Reflection In C#, with different numeric types, using object and reflection, this is probably the closest to what you are asking for.

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;         }     } } 
like image 150
Rhyous Avatar answered Sep 17 '22 17:09

Rhyous