2013-05-21 92 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',那么重写它就不会做任何事情。看起来像重复的代码。