c# - IronPython 编号 == null?

标签 c# windows-phone-8 clr windows-phone ironpython

我正忙于将 IronPython 移植到 Windows Phone 8,现在我遇到了一个问题,我无法检查 python 脚本中的数字是否为空。

例如,如果我尝试:

testnum a = 0.1
if testnum == None:
    print "Value is null

然后我得到以下错误:

An exception of type 'System.ArgumentNullException' occurred in Microsoft.Dynamic.DLL and wasn't handled before a managed/native boundary
Value cannot be null.
Parameter name: y

我确定发生这种情况的原因是因为“FEATURE_NUMERICS”未启用,因为 WP 没有 System.Numerics.BigInteger 和 System.Numerics.Complex。在当前的源代码中,这两个似乎是手动实现的。

我已经更改了 BigInterger 实现中的所有“==”运算符以支持 null,如下例所示:

public static bool operator ==(BigInteger x, BigInteger y) {
        if (object.ReferenceEquals(x, null) || object.ReferenceEquals(y, null))
            return false;
        return Compare(x, y) == 0;
    }

虽然我意识到这实际上是毫无用处的,因为 y 永远不会是包含空值的任何形式的数字。这样做的原因是因为(我假设)IPY 解析 python 脚本并决定对哪种类型的值应用操作以及当它看到数字和 null 时自动抛出“System.ArgumentNullException”因此甚至不会将它发送到 BigInterger .

我现在的问题是我不知道这个异常起源于哪里,我假设在解析器的某个地方。我的想法是,当我找到原点时,就像我在上面所做的那样,我只是返回 false。你们有没有人知道我应该在哪里寻找这个异常的起源?

最佳答案

我设法让它工作,问题确实出在整数模块上,我只是看起来不够宽。

关于c# - IronPython 编号 == null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775108/

相关文章:

c# - 在 WINRT 应用程序中使用转换器

c# - Azure 移动服务查询不返回所有行

.net - 为什么 Visual Studio/CLR 会生成 "bad"可执行文件?

c# - 使用超过 2^31 个元素的虚拟化集合进行 UI 虚拟化

c# - MVC 5 Web API - 使用 API key

c# - 如何修改 LabelFor 以在必填字段上显示星号?

design-patterns - MVVM 本身是一种观察者模式吗?

.net - Google Web Toolkit 的最佳 .Net 版本是什么?

powershell - 远程运行命令时如何更改Powershell CLR版本?

C# 和 SQL Server 2008 - 批量更新