2

Can anybody help to convert this Powershell line of code to C#, please?

$query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count

2 Answers 2

5

This expression:

,2 * $count

Creates an [int[]] (an array of [int]'s) of length $count where each item has the value initialized to 2.

In C# you could either create the same array with Enumerable.Repeat():

query.TextFileColumnDataTypes = Enumerable.Repeat(2, worksheet.Cells.Columns.Count).ToArray()

Or initialize each item manually:

var array = new int[worksheet.Cells.Columns.Count];
for(int i = 0; i < array.Length; i++)
    array[i] = 2;
query.TextFileColumnDataTypes = array;
Sign up to request clarification or add additional context in comments.

Comments

2

To complement Mathias R. Jessen's helpful answer:

  • .NET Core 2.0+ / .NET 5+ / .NET Standard 2.1+ - but not .NET Framework - now offer a convenient static Array.Fill() method:

    var a = new int[3];
    // Note: There is also an overload to target a *subrange*.
    Array.Fill(a, 42);  // -> int[3] { 42, 42, 42 }
    
  • Enumerable.Repeat() is convenient, but slow compared to the for solution.

  • To take the drudgery out of the for solution, you can define an extension method, adapted from this answer.

    public static T[] Fill<T>(this T[] a, T value ) {
      for (int i = 0; i < a.Length; ++i) { a[i] = value; }
      return a;
    }
    
    // Sample call:
    var a = new int[3].Fill(42);  // -> int[3] { 42, 42, 42 }
    

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.