- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在if语句中尝试了$psCustomObject.x -eq $null
和$null -eq $psCustomObject.x
的两种情况,只有后者通过了if。
为什么这样表现呢?看来不合逻辑。
我的特定用例是一个json文件,其中包含多个环境的配置。环境的名称是对象中的关键,我的目标是在目标不存在的环境(可能是拼写错误)时通知用户,然后停止。
我不想使用! opreator,因为它具有极高的信息与代码比率-很容易忽略,但是却有很大的不同,因此,我通常不喜欢它。它还需要了解该语言的工作原理(powershell不是静态类型的,我不希望读者需要了解什么是真理还是不真理)。这听起来可能很愚蠢,但是powershell不是我的主要语言,也不是我的同事的语言。可读性是我的关键因素。
最佳答案
tl;博士
要将值与$null
或-eq
进行比较,始终将-ne
设置为LHS :
$null -eq $psCustomObject.x # NOT $psCustomObject.x -eq $null
$null
之外的其他内容进行比较,由于隐式类型转换,操作数的顺序也可能很重要。 $null
在设计上与数组值的LHS 行为不同,因此
哪一个操作数对至关重要,即使对于通常可交换的运算符
-eq
和-eq
。
-ne
或$True
,指示比较结果。$False
执行字符串比较(将整数' 2 ' -eq 2
强制转换为字符串2
)并因此返回'2'
,而$False
执行整数比较(将字符串2 -eq ' 2 '
转换为' 2 '
)并因此返回[int]
。 $True
),因为它充当过滤器:运算符分别应用于输入数组的元素,返回的是操作为其返回[object[]]
的那些元素的子数组。 $True
和$null -eq $psCustomObject.x
不可互换,并测试不同的条件:
# Is the RHS $null?
# Whether the concrete RHS value is then a scalar or an array doesn't matter.
$null -eq $psCustomObject.x
# * If $psCustomObject.x is a scalar: is that scalar $null?
# * If $psCustomObject.x is an ARRAY:
# RETURN THE SUB-ARRAY OF ELEMENTS THAT ARE $null
$psCustomObject.x -eq $null
$psCustomObject.x -eq $null
语句中)使用
时,对数组(例如,以数组值的LHS返回的数组)进行排序时,的计算方式如下:向PetSerAl求助帽子的技巧。if
。 $False
实际上与[bool] @(0)
(即[bool] 0
)相同。 $False
,无论其元素值如何(例如,$True
和[bool] ($False, $False)
都是[bool] (, (, $False))
。 $True
接口(interface)的任何类型的实例-请参见the source code。[System.Collections.IList]
和[System.Collections.ArrayList]
之类的类型。[System.Collections.Generic.List[<type>]]
运算符提供更简单的示例。 -ne
返回$null -eq $psCustomObject.x
,但$True
不。如果确实如此,请告诉我们所涉及的特定$psCustomObject.x -eq $null
值。 # Construct a custom object with an array-valued .x property that
# contains at least 2 $null values.
$psCustomObject = [pscustomobject] @{ x = @(1, $null, 2, $null) }
# $False, as expected: the value of .x is an array, and therefore not $null
[bool] ($null -eq $psCustomObject.x)
# !! $True, because because 2 elements in the input array (.x)
# !! are $null, so a 2-element array - ($null, $null) - is returned, which in a
# !! Boolean context is always $True.
[bool] ($psCustomObject.x -eq $null)
.x
与比较运算符组合在一起,从技术上讲,它的RHS是一个数组,但是此数组的元素本质上是标量操作数:要匹配的正则表达式和替换字符串。
关于powershell - 测试PSCustomObject的属性时,为什么操作数的顺序很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152438/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!