1

编辑#3。

我设法让它工作。我需要在主脚本文件中以正确的顺序加载所有依赖项。不是来自类文件,所以我会投票关闭这篇文章。


我在 Windows 10 上使用 powershell 5.0。$list = New-Object System.Collections.Generic.List``1[CustomClass]在大多数情况下,使用 List(例如)都有效。但是当我将它用作返回类型时出现错误。

下面的代码不起作用。

class CustomClass1 {

   [System.Collections.Generic.List``1[CustomClass]]GetColumns([string]$tableType){
     $list = New-Object System.Collections.Generic.List``1[CustomClass]
     return $list
  }
}

编辑:#1

我在下面尝试了此代码,但效果不佳。

[System.Collections.Generic.List``1[CustomClass]]GetColumns([string]$tableType) {
        $list = New-Object System.Collections.Generic.List``1[CustomClass]
        $c= New-Object CustomClass
        $list.Add($c)

        return ,$list
    }

编辑:#2

我在这个 repo 中推送我的测试脚本https://github.com/michaelsync/powershell-scripts/tree/master/p5Class

自定义类.ps1

class CustomClass {
  [string]$ColumnName
}

CustomClass1.ps1

. ".\CustomClass.ps1" 

class CustomClass1 {

  [System.Collections.Generic.List``1[CustomClass]]GetColumns(){

     $list = New-Object System.Collections.Generic.List``1[CustomClass]
     $c = New-Object CustomClass
     $list.Add($c)

     return $list
  }
}

测试.ps1

. ".\CustomClass1.ps1" 

$c1 = New-Object CustomClass1
$c1.GetColumns()

如果我将所有类放在一个文件中,它就可以工作。我认为这与加载 ps1 文件的方式有关。(感谢@jesse 的提示。)

但如果我使用普通类型,如字符串、整数等,它就可以工作。

class CustomClass1 {

   [System.Collections.Generic.List``1[string]]GetColumns([string]$tableType){
     $list = New-Object System.Collections.Generic.List``1[string]
     return $list
  }
}

当我为通用列表分配自定义类时,它也有效。

$list = New-Object System.Collections.Generic.List``1[CustomClass]
$c = New-Object CustomClass
$list.Add($c)

这是我们无法返回具有自定义类类型的通用列表的已知问题吗?

4

1 回答 1

1

您的错误“无法找到类型 [CustomType]”表明加载类型的顺序存在问题,或者您错过了完全加载依赖项(无论是脚本还是程序集)。

在使用您的函数之前检查是否已加载所有脚本和程序集。

于 2015-11-22T11:19:59.997 回答