2013-05-21 126 views
4

過這個片斷今天的代碼來的?該函數的返回類型已經是EventFeed,所以我很努力地看到這樣的聲明的好處。設置變量「類型」

我發現很難搜索這個問題,所以我在這裏問。寫這樣的一行有什麼好處?

+3

'Query'似乎返回'object'而不是'EventFeed',['as'](http://msdn.microsoft.com/zh-cn/library/cscsdfbt(v = vs.110).aspx )試圖相應地施放它。看看[Casting and Type Conversions](http://msdn.microsoft.com/en-us/library/ms173105.aspx)。 –

+1

如果'service.Query(eventQuery)'不能轉換爲'EventFeed'類型,它將被設置爲'null'。 –

+0

有人可能會爭辯說,'feed'被聲明爲'EventFeed','as EventFeed' cast是多餘的,因爲這顯然是你想要的。但是這可能有一些缺點:除此之外,它會使語言不易閱讀。 – pyrocumulus

回答

7

feed可能被宣佈爲EventFeed但是service.Query(eventQuery)的結果可能不是。

使用as會停止拋出的異常,並且如果表達式的結果不能轉換爲EventFeed,則最終將返回null

你可以閱讀更多關於as這裏 - http://msdn.microsoft.com/en-us/library/cscsdfbt(v=vs.71).aspx

+0

非常有用的信息 - 謝謝:) –

1

這取決於數據類型從Query調用返回。 as在這種情況下會嘗試將結果轉換爲EventFeed類型,否則返回null

1

您的查詢可返回一個object

service.Query(eventQuery) 

所以你投射這種對象爲您的數據類型。

+0

那麼它只是另一種投射方式? –

+0

是的,它用於兼容參考類型之間的轉換 – Sachin

+1

@Teifi是的,如果它不能投射雖然,而不是拋出異常將返回一個空 – Liam

0

如果Query方法簽名規定,它返回一個EventFeed(而不是返回一個基類,但你知道它是一個EventFeed)。那麼as是不必要的。

僅僅因爲您聲明feedEventFeed並不意味着您從Query得到的對象是。你可能試圖把一個方形的釘子放在一個圓孔裏。

+0

對不起,我措辭嚴重地說了這個問題。我沒有這個假設;)我的意思是我已經知道返回類型是'EventFeed' –

0

根據你的編輯,如果service.Query已經返回'EventFeed',那麼重寫它就不會做任何事情。看起來像重複的代碼。