PowerShell排序顺序不正确

And*_*ndy 4 c# sorting powershell

所以我试图使用PowerShell对文件顶部的C#"using"语句进行排序.对于给定的输入文件File.cs,using语句如下所示:

using System.Reflection;
using System.Configuration;
using System.Runtime.Caching;
using System.Linq;
using System;
Run Code Online (Sandbox Code Playgroud)

我希望输出"使用System"作为第一个"使用",但实际上Sort-Object将它排序到底部.如何更改此选项以排序到列表顶部?

function Update-UsingStatements
{
  param (
    [Parameter(Mandatory=$true)][string]$FilePath
  )

  $fileLines = Get-Content $FilePath
  $contents = $fileLines | Out-String

  $list = New-Object 'System.Collections.Generic.List[string]'
  $contents | Select-String -pattern 'using\s[\w\.]+;' -AllMatches | ForEach-Object {$_.Matches} | ForEach-Object { $list.Add($_.Value) }
  $list = $list | Sort-Object

  for ($i = 0; $i -lt $list.Count; $i++)
  {
    $fileLines[$i] = $list[$i]
  }

  $fileLines | Out-File $FilePath -Encoding utf8
}
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 5

您正在获得该排序顺序,因为字符串包括尾部;,并且在字符表;(ASCII字符59)之后.(ASCII字符46).所以排序顺序绝对正确,即使它不是你所期望的.

从您对其进行排序的属性中删除尾随分号:

$list = $list | Sort-Object { $_ -replace ';' }
Run Code Online (Sandbox Code Playgroud)

  • 我有同样的想法,但是会使用`$ _.TrimEnd(';')`而不是`-replace`.看起来浪费作为单独的答案发布,所以我只是添加评论给你的添加选项.现场回答Ansgar,工作很好! (3认同)