这是我遇到的一个奇怪的人。我有一个返回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);
}
(类型检查是事先完成的,并且parseFloat
永远不应该使用不会计算为 afloat
或的表达式来调用int
。)是否有某些原因需要双重转换此变量?我显然不想在所有情况下都重复它,因为如果返回 fromparser
是a float
,它会将它截断为int
first 而我们不希望这样。(是的,我尝试用float
andint
替换Single
andInt32
等。没有任何区别。)
我看到了这个问题,但这取决于提前知道类型,它提供的唯一解决方案是这种双重转换技巧,在我的情况下,float
除非我先进行类型检查,否则它会截断 s,这还需要额外的本地变量来保存结果。有什么办法可以避免这个额外的步骤?