2013-05-27 46 views
2

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

举例来说,如果我尝试:

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。在目前的来源看来,这两个人然后手动实施。

我已经改变了所有的“==” opertors在BigInterger实施支持空如下面的例子:

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

我虽然已经意识到这其实是相当无用的,因为Ÿ将永远不会有任何形式的一个包含空值的数字。原因是(我假设)IPY解析python脚本,并决定应用哪种类型的值以及何时会看到一个数字,并且null会自动抛出一个'System.ArgumentNullException',因此永远不会将它发送到BigInterger 。

我现在的问题是,我不知道这个异常来自哪里,我假设解析器中的某个地方。我的想法是,当我发现原点做了上面我做的事情时,我只是简单地返回false。你们中的任何一个人都知道我应该在哪里寻找发生此异常的地方?

+0

你能分享代码吗? – Oren

回答

0

我设法让它工作,问题确实与整数模块,我只是不够宽。