これは私が遭遇した奇妙なものです。を返す関数がありますobject
。特定のケースでは、オブジェクトが であることは確かですが、int
この関数を呼び出す別の関数にはfloat
. これを機能させる唯一の方法は次のとおりです。
private object parser(string expr) {...}
private float parseFloat(string expr)
{
...
object result = parser(expr);
if (result is int)
return (float)(int)result;
else
return (float)result;
}
この場合のパーサー関数の結果がint
. (デバッガーで確認できます。) 次の行は単純にすることをお勧めします。
private float parseFloat(string expr)
{
...
return (float)parser(expr);
}
(型チェックは事前に行われ、 orparseFloat
に評価されない式で呼び出されるべきではありません。) この変数をダブルキャストする必要がある理由はありますか? からの戻り値がaである場合、最初に切り捨てられ、それを望まないため、すべての場合にダブルキャストしたくないことは明らかです。(そして、はい、 andをandなどに置き換えてみましたが、違いはありませんでした。)float
int
parser
float
int
float
int
Single
Int32
私はこの質問を見ましたが、それは事前に型を知ることに依存しており、それが提供する唯一の解決策はこの二重キャストのトリックfloat
です.結果を保持する変数。その余分なステップを回避する方法はありますか?