IronPython を Windows Phone 8 に移植するのに忙しいのですが、Python スクリプトで数値が 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
これが発生する理由は、WP に System.Numerics.BigInteger と System.Numerics.Complex がないため、「FEATURE_NUMERICS」が有効になっていないためだと判断しました。現在のソースでは、これら 2 つは手動で実装されたようです。
以下の例のように、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 が null 値を含む数値の形式になることは決してないため、これは実際にはまったく役に立たないことに気付きました。この理由は、IPY が python スクリプトを解析し、操作を適用する値のタイプを決定し、数値と null を検出すると自動的に「System.ArgumentNullException」をスローするためです。そのため、BigInterger に送信することさえありません。 .
私の問題は、この例外がどこで発生したのかわからないことです。パーサーのどこかであると想定しています。私の考えは、原点が見つかったときに、上記のように false を返すということです。この例外が発生した場所をどこで探すべきか知っている人はいますか?