使用原始构造函数扩展加速的.Net类

问题描述

受到这些问题的启发:

我正在尝试使用PowerShell中的ToBigInt()方法扩展IPAddress类(如果可能的话),以便能够使用以下方法轻松比较(IPv4 IPv6)地址比较操作以及-lt-gt。例如:

([IPAddress]'2001:db8::8a2e:370:7334').ToBigInt() -lt ([IPAddress]'2001:db8::8a2e:370:7335').ToBigInt()

我的第一次尝试:

class IPAddress : System.Net.IPAddress {
    [Void]ToBigInt() {
        $BigInt = [BigInt]0
        foreach ($Byte in $This.GetAddressBytes()) {
            $BigInt = ($BigInt -shl 8) + $Byte
        }
        $BigInt
    }
}

导致错误:

Line |
   1 |  class IPAddress : System.Net.IPAddress {
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Base class 'IPAddress' does not contain a parameterless constructor.

因此,显然,我需要将([IPAddress]::new)构造函数添加到子类中:

class IPAddress : System.Net.IPAddress {
    IPAddress ([long]$NewAddress) : base($NewAddress) { }
    IPAddress ([byte[]]$Address,[long]$ScopeId) : base($Address,$ScopeID) { }
    IPAddress ([System.ReadOnlySpan[byte]]$Address,$ScopeID) { }
    IPAddress ([byte[]]$Address) : base($Address) { }
    IPAddress ([System.ReadOnlySpan[byte]]$Address) : base($Address) { }
    
    [Void]ToBigInt() {
        $BigInt = [BigInt]0
        foreach ($Byte in $This.GetAddressBytes()) {
            $BigInt = ($BigInt -shl 8) + $Byte
        }
        $BigInt
    }
}

现在,类定义已被接受,但是当我尝试创建IPAddress时,例如:

[IPAddress]'172.13.23.34'

我收到一个新错误:

OperationStopped: Unable to cast object of type 'System.Net.IPAddress' to type 'IPAddress'.

如何解决此投射错误?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...