gpt4 book ai didi

.net - 如何使用 [Microsoft.Win32.RegistryValueKind]::TryParse

转载 作者:行者123 更新时间:2023-12-05 01:52:54 24 4
gpt4 key购买 nike

我似乎无法让 [Microsoft.Win32.RegistryValueKind]::TryParse 正常工作。我尝试的每个解决方案总是返回 Cannot find an overload for "TryParse"and the argument count: "2"。 (或“3”)尽管它显示了以下内容。

PS C:\Windows\system32> [Microsoft.Win32.RegistryValueKind]::TryParse

OverloadDefinitions
-------------------
static bool TryParse[TEnum](string value, [ref] TEnum result)
static bool TryParse[TEnum](string value, bool ignoreCase, [ref] TEnum result)

根据我的经验,以下任何一项通常都可以正常工作。

[Microsoft.Win32.RegistryValueKind]::TryParse('dword',[ref]$Null)
[Microsoft.Win32.RegistryValueKind]::TryParse('dword',$true,[ref]$Null)

与此同时,我可以将字符串转换为 [Microsoft.Win32.RegistryValueKind] 但我很好奇我做错了什么。

最佳答案

TryParse实际上是由System.Enum实现的,是一个泛型方法。它返回一个bool是否解析成功,第二个参数是一个out,带有实际的解析结果。

如果您想使用 TryParse,您会遇到很多问题。

首先,您不能在旧版本的 Powershell 中直接调用泛型方法。如果您使用的是 PS 7.3 或更高版本,那么您现在可以这样做:

[System.Enum]::TryParse[Microsoft.Win32.RegistryValueKind]('DWord', [ref]$prm)

对于使用 .Net Core 或 .Net 5 的 Powershell 版本(如果有的话我不知道),您还可以使用非通用版本的 TryParse

[System.Enum]::TryParse([Microsoft.Win32.RegistryValueKind], 'DWord', [ref]$prm)

尽管如此,在早期版本中您需要使用反射。

$arrParams =  @('DWord', $null)

$method = ([System.Enum].GetMethods() | where {($_.Name -eq "TryParse") -and ($_.GetParameters().Length -eq 2) })[0].MakeGenericMethod(@([Microsoft.Win32.RegistryValueKind]))

$method.Invoke($null, $arrParams);

$arrParams[1]

注意字符串参数区分大小写,因此必须是'DWord'

关于.net - 如何使用 [Microsoft.Win32.RegistryValueKind]::TryParse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71364406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com