我有一个网络服务,它告诉我这是函数参数..
Public Function Create(ByVal Name As String, ByVal templateId As Integer)
问题是 templateid 是 GUID。如果我将其传递给函数,该函数将无法工作,因为它需要是一个整数。我可以肯定地说 templateid 是来自 SQL 数据库的 GUID。
那么我怎样才能将该 GUID 更改为整数以便该函数能够接受它呢?有可能吗?
所有解析测试都返回错误,这意味着这是不可能的。
我从函数定义中假设它是 Visual Basic,其中
Integer
类型是 32 位有符号整数。即使它是 64 位无符号整数,[guid]
也是 128 位,因此它的值无法放入 Integer
。
使用传统方法无法将 GUID“转换”为整数。您可以根据您自己的规范创建一些特殊的算法来执行转换,但对此没有标准。
我看到了几个选项,但没有有关该场景的更多详细信息:
C# 和 PowerShell 都将 GUID 表示为 128 位带连字符的十六进制数字。
强调它们是十六进制数字很重要,因为其他答案会让您相信它们只是字母数字。造成这种误解的原因是有关 C# GUID 的文档没有明确说明它们是
但是,稍加挖掘,您就会发现 GUID 的 constructor 和 ToString() 方法可以做到这一点。
现在,第二个问题是 GUID 是 128 位。在编写其他答案时,.NET 的最大整数值为 64 位。 在 .NET 7.0 中,情况不再如此 - 现在支持 128 位整数。
因此,为了回答您的问题,您可以通过删除连字符并像这样解析它,将 GUID 转换为 PowerShell 7.0 中的 Int128:
# C# API:
# static long System.Int128.Parse(string s, System.Globalization.NumberStyles style)
#
# Relevant NumberStyles Value in PowerShell:
# [System.Globalization.NumberStyles]::HexNumber = 515
[Int128]::Parse( ((New-Guid) -replace "-", ""), 515 )