【发布时间】:2021-11-28 09:44:32
【问题描述】:
有人可以帮忙把这行 Powershell 代码转换成 C# 吗?
$query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count
【问题讨论】:
标签: c# powershell
有人可以帮忙把这行 Powershell 代码转换成 C# 吗?
$query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count
【问题讨论】:
标签: c# powershell
这个表达式:
,2 * $count
创建一个长度为$count 的[int[]]([int] 的数组),其中每个项目的值都初始化为2。
在 C# 中,您可以创建相同的数组 with Enumerable.Repeat():
query.TextFileColumnDataTypes = Enumerable.Repeat(2, worksheet.Cells.Columns.Count).ToArray()
或者手动初始化每个项目:
var array = new int[worksheet.Cells.Columns.Count];
for(int i = 0; i < array.Length; i++)
array[i] = 2;
query.TextFileColumnDataTypes = array;
【讨论】:
补充Mathias R. Jessen's helpful answer:
.NET Core 2.0+ / .NET 5+ / .NET Standard 2.1+ - 但不是 .NET Framework - 现在提供方便的静态 @987654322 @ 方法:
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() 很方便,但与for 解决方案相比慢。
要从for 解决方案中解脱出来,您可以定义一个扩展方法,改编自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 }
【讨论】: