Статический член в статическом методе в классе Powershell - PullRequest
1 голос
/ 13 марта 2019

Почему прямой доступ статического сбоя, но косвенный работает? Обратите внимание, что загруженный файл действителен в обоих примерах.

Сбой при использовании Direct To Static

class OpPrj {

[string] $ProjectPath

static [string] $configFile = 'settings.json';

[OpPrj] static GetSettings(){
   return [OpPrj](Get-Content [OpPrj]::configFile | Out-String|ConvertFrom-Json);
}

Работает путем присвоения локальным

class OpPrj {

  [string] $ProjectPath

  static [string] $configFile = 'settings.json';

  [OpPrj] static GetSettings(){
      $file = [OpPrj]::configFile
      Write-Host $file  # outputs settings.json
      return [OpPrj](Get-Content $file | Out-String | ConvertFrom-Json);
  }

1 Ответ

1 голос
/ 13 марта 2019

У вас есть синтаксическая ошибка при вызове Get-Content:

Get-Content [OpPrj]::configFile

Синтаксический анализатор PowerShell не может определить, где это заканчивается (я не уверен в причине), поэтому вам нужно явно обернутьэто в скобках (я также рекомендую четко указывать параметр, который вы передаете, особенно в сценариях, для удобства чтения):

Get-Content -Path ([OpPrj]::configFile)

Вам нужно будет следовать этому синтаксису для перечислений и статических членов класса.


Всего (ваш звонок на Out-String не нужен):

class OpPrj
{
    [string] $ProjectPath

    static [string] $ConfigFile = 'settings.json'

    static [OpPrj] GetSettings()
    {
        return [OpPrj](Get-Content -Path ([OpPrj]::ConfigFile) -Raw | ConvertFrom-Json)
    }
}
...