【发布时间】:2012-10-08 08:11:00
【问题描述】:
我得到了以下类层次结构:
MssqlDataSource<T>:DataSource<T>:IDataSource<T>:IQueryable<T>
在MssqlDataSource 类中我得到了属性:
private Table<T> Table { get { return (Table<T>)(IQueryable<T>)this; } }
并且双重转换(this 到 IQueryable,然后到 Table)不能简化为 (Table<T>)this 或只是 this,因为我收到编译错误。
private Table<T> Table { get { return (Table<T>)this; } }
产生:
那么怎么解决呢?如何只使用一个转换(或者最好不使用)来避免编译错误?为什么会出现?
【问题讨论】:
-
MssqlDataSource<T>是否被标记为sealed? -
你说的好像很明显……不过请参考我刚才问的this question,可能会扩大理解,但可能不会直接回答。
-
@AgentFire
as实际上可以更快,因为它不对演员进行类型检查。如果您的项目将是正确的类型,则最终结果将与强制转换相同。这完全与编译器保证有关,这基本上是将责任从编译器转移到运行时。 -
@AgentFire 我理解这一点,但是你想删除强检查(和错误),但你总是希望类型是表类型的实例。要么 100% 确定并使用
as,要么只进行手动转换。 -
@AgentFire:看来
this不是Table<T>。那你为什么要把它投射到Table<T>?我不明白为什么你还没有让代码工作时担心性能...