【发布时间】:2015-08-04 21:57:46
【问题描述】:
以下显示返回类型不同取决于返回的行数。为什么要这样设计?很容易假设它总是返回一个数组并编写代码$a.Length,当它只返回一行时会引发错误,除非它写为$a | % { ....}$a = @(invoke-....),即容易忘记。
$a=Invoke-Sqlcmd -ServerInstance server "select 1 a"
$b=Invoke-Sqlcmd -ServerInstance server "select 1 a union all select 2"
$a.GetType()
IsPublic IsSerial 名称 BaseType
-------- -------- ---- --------
True False DataRow System.Object
以下语句返回一个对象数组(顺便说一句,为什么不是 DataRow 数组?)
$b.GetType()
IsPublic IsSerial 名称 BaseType
-------- -------- ---- --------
真真对象[] System.Array
但是,gm 为两个变量返回相同的类型。为什么会这样设计,这可能会让人很困惑。
问题:
- 只返回一项时,删除数组有什么意义?
- 为什么
gm获取数组的项类型?如何gm的数组? - 为什么
getType()在返回数组类型的时候不能返回item的数据类型?
?
PS SQLSERVER:\> $a|gm
TypeName: System.Data.DataRow
Name MemberType Definition
---- ---------- ----------
AcceptChanges Method void AcceptChanges()
......
ToString Method string ToString()
Item ParameterizedProperty System.Object Item(int columnIndex) {get;set;}, System.Object Item(string co...
a Property int a {get;set;}
PS SQLSERVER:\> $b|gm
TypeName: System.Data.DataRow
Name MemberType Definition
---- ---------- ----------
AcceptChanges Method void AcceptChanges()
......
ToString Method string ToString()
Item ParameterizedProperty System.Object Item(int columnIndex) {get;set;}, System.Object Item(string co...
a Property int a {get;set;}
【问题讨论】:
-
我希望我能回答这个问题,但我想我错过了一些关键的部分。 1. 这可能高达
Invoke-Sqlcmd并且还取决于您的 PowerShell 版本。 2. Get-Member 作用于管道中传递的元素而不是整个对象,这就是为什么 3. 返回它所做的事情。 -
你用的是什么版本的powershell?
标签: powershell