繁体   English   中英

“ is”关键字如何工作?

[英]How does the “is” keyword work?

更具体地说,为什么这样做:

foreach (ChangeSetEntry changeRow in changeSet.ChangeSetEntries)
    if (changeRow is RouteStage)
    { ... }

但这不是吗?

ChangeSetEntry changeRow = changeSet.ChangeSetEntries[0];
if (changeRow is RouteStage)
{ ... }

在后一种情况下,我得到一个编译器警告,说:

给定的表达式绝不是提供的类型。

我可以理解,因为changeRow是一个ChangeSetEntry而不是RouteStage ,那么为什么它在foreach块中起作用?

这是我对RIA Services DomainService中的Submit方法的重写。 RouteStage是我定义为由DomainService返回的DomainService

我测试了您的代码示例(与RIA域服务的Submit覆盖中所述的条件完全相同),两者均产生警告。

实际上是可以预期的:在两种情况下,您都具有声明为ChangeSetEntry变量的changeRow 无论它是否处于foreach循环中,都不会对此进行任何更改。 由于RouteStage不继承自ChangeSetEntry (已密封),因此应始终显示警告。

要么您简化了示例(缺少某些内容),要么正如乔恩·斯基特(Jon Skeet)怀疑的RouteStage ,两个代码段中的RouteStage类型实际上并未引用相同的类型(检查您是否没有using RouteStage = ChangeSetEntry;您在类中的某个位置) )。

该行应显示为:

if (changeRow.Entity is RouteStage)

...然后干净地编译。 其中一种情况是“看不到外观”。 TFS强调了我无意中更改的内容。

我可以理解,因为changeRow是一个ChangeSetEntry而不是RouteStage,那么为什么它在foreach块中起作用?

我不认为foreach循环。 唯一的区别似乎是编译器不对循环内的变量执行静态检查。 因此,不会显示警告。 但是我想ifforeach循环内执行永远不会过去if因为条件始终为假。

解决方法只是删除两种形式的if语句,因为事先知道它永远都不是真的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM