我正忙于将 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/