這是我遇到的一個奇怪的問題。我有一個返回object
的函數。在特定情況下,我確定該對象是int
,但調用此函數的另一個函數需要float
。我能得到這個工作的唯一方法是如下:需要雙重轉換才能將int從對象轉換爲浮點型
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
不應該用不會計算爲float
的表達式被稱爲或int
。)是否有必要對此變量進行重複投票的某些原因?我顯然不希望在所有情況下雙投它,因爲如果從parser
回報率爲一個float
,它將它截斷爲int
第一,我們不希望出現這種情況。 (是的,我試着用Single
和Int32
更換float
和int
等沒有任何區別。)
我看到this question,但是它依賴於預先知道的類型,並且它提供了唯一的解決辦法是這種雙重鑄造技巧,這在我的情況下,將截斷float
小號除非我首先做一個類型檢查,這還需要一個額外的局部變量來保存結果。有什麼辦法可以避免這個額外的步驟嗎?
你爲什麼不提供一個'ParseFloat',如果你肯定知道這是一個? –
這就是......的目的。傳遞給'ParseFloat'表達可以是一個浮動文本(這是在處理...代碼)或返回浮點數的函數。解析器的工作是解釋這樣的函數(實際上可能是幾個嵌套函數)。 –
這是一個常見問題。我在2009年回答了,在這裏:http://ericlippert.com/2009/03/03/representation-and-identity/ –