我正在处理一个函数,它接受[Simple]$DurationMS
作为可选参数。这应该是浮点值。所以在我的函数中,我有以下代码来检查它是否已提供给函数。如果提供了,我想将值添加到嵌套在另一个对象中的对象。
if ($DurationMS -ne $null) {
$MyObject.attributes | Add-Member -MemberType NoteProperty -Name 'duration.ms' -Value $DurationMS
}
一切看起来都很好,但当我测试它时,我在持续时间内得到0,我不知道为什么。
duration.ms
-----------
0
所以我的情况评估为真,但我不明白为什么。
> < li>
[single]
是. NET值类型,这种类型的实例永远不能是< code>$null。
[单]。
返回$true
值类型会告诉您它是一种值类型。$null
仅适用于 .NET 引用类型,并告诉您这是对无对象的引用。因此,测试您的[单]
-tybed$DurationMS
参数变量是否为$null
是毫无意义的:
检查参数是否在给定调用中传递给给定(非强制)参数的可靠方法是查阅自动$PSBoundParameters
变量,如圣地亚哥·斯夸尔松所建议的那样。
-
) 键控,例如,如果您的函数是使用 -DurationMS 1.2
调用的,$PSBoundParameters['DurationMS']
返回 1.2
,并且 $PSBoundParameters.ContainsKey(“持续时间MS”)
指示$true
因此:
# Was an argument passed to -DurationMS?
if ($PSBoundParameters.ContainsKey('DurationMS')) {
$MyObject.attributes |
Add-Member -MemberType NoteProperty -Name 'duration.ms' -Value $DurationMS
}
以下方面是附带的:
>
if ($DurationMs)
仅在您还想考虑 0
的显式参数以表示“未提供任何值”时才有效,因为对于 [single]
类型$DurationMs
,如果 ($DurationMs)
与 if ($DurationMs -ne 0)
相同
考虑到许多PowerShell运算符可以隐式操作数组(集合)作为LHS-在这种情况下,它们充当过滤器,返回匹配项的子数组-通常最好在LHS上放置一个标量比较操作数(在的情况下,我们知道非文字操作数根据定义也是标量-一个<code>〔single〕
>
将标量放置在LHS上可避免误报/误报,例如以下示例:
$arr = 0, $null
# !! -> 'null', because (0, $null) -ne $null filters the
# !! array to @(0), and [bool] @() - perhaps surprisingly - is $false
if ($arr -ne $null) { 'not null' } else { 'null' }
# OK, with $null on the LHS
# -> 'not null'
if ($null -ne $arr) { 'not null' } else { 'null' }
但是,即使在 LHS $null
也可能表现出意外的行为,即 -lt
、-le
、-gt
和 -ge
运算符,如本答案中所述;
$null -lt 0 # !! -> $true - even though [int] $null yields 0
如果PowerShell为$null
提供了专门的测试,则可以避免这些陷阱;实现这样的测试 - 以$var的形式 - 是$null
或$var - isull
- 是GitHub PR #10704的主题;不幸的是,该PR被其创建者放弃了,此后没有人拿起这项工作,这就是为什么在PowerShell 7.2.2中不存在这样的测试。
正如Lee Dailey指出的,像< code>duration.ms这样的属性名可能会有问题,因为它包含< code >。,这通常表示嵌套的属性访问,给定一个(未加引号的)< code >。充当成员访问操作员。
我试图创建一个javascript变量从JSON文件的内容GunsList.json(两者都存储在我的机器上的同一个文件夹)。 我似乎遇到了OP在这篇文章中遇到的相同问题,当他纠正了有缺陷的JSON文件时,问题得到了解决。考虑到我也有同样的问题,我通过JSONLint运行了我的文件(我假设这是正确的验证),结果它完全恢复正常。 借用本文中的技巧,我尝试使用jQuery来完成它(注意:我在现有代码的
问题内容: 帮助我与同事解决争执:在Java中将变量或集合设置为null是否有助于垃圾回收并减少内存使用?如果我有一个运行时间较长的程序,并且每个函数都可能被迭代调用(可能数千次):在将值返回给父函数之前将其中的所有变量设置为null是否有助于减少堆大小/内存使用量? 问题答案: 那是旧的表演传奇。在1.0天之内确实如此,但是对编译器和JVM进行了改进以消除这种需求(如果有的话)。如果您感兴趣,这
我有两个组件。 彩虹。jsx 彩虹列表.jsx 雨弓.jsx 是具有数组和雨弓列表.jsx 的主要组件,我用它来用 map() 以 li 格式显示所有彩虹色。 我在控制台日志中得到错误消息ShowRainBow。状态:必须设置为对象或null 我的代码 彩虹. jsx RainBowList.jsx
本文向大家介绍当一个元素被设置为浮动后,它的display值变为什么呢?相关面试题,主要包含被问及当一个元素被设置为浮动后,它的display值变为什么呢?时的应答技巧和注意事项,需要的朋友参考一下 一个元素被设为绝对定位或者浮动后,其display计算值就变为了block,尽管其表现形式和inline-block类似——包裹内部元素且不超出包含块的特性。按照如下方式在控制台尝试可验证: var
问题内容: 我从数据库中得到一个数字,这个数字可能是或。 我需要将数字的小数精度设置为,这会使数字不超过(关于小数)或。 使用PHP 我看到一个问题: 四舍五入数字。我需要一个仅将小数点缩短而不改变其值的函数,而这些值似乎不遵循。 问题答案: 您可以用来实现以下目的: 这将转换为。 但是,如果您只想将小数位数缩短到3,而 不是 四舍五入,则可以执行以下操作: 乍一看可能令人生畏,但是这个概念确实很
我得到了这个转义的JSON 我需要使用Jackson将其转换为Java对象。 然后我创建了一个方法来转换它 Data类中设置为public的变量,那么调用getter时,我将获得。Data类中设置为private的变量,那么调用getter时将得到。 getter和setter总是公共的。