在今天晚上测试一些代码时,我天真地尝试了一个双重转换来转换List为IQueryable(注意:我知道.AsQueryable(),请阅读整个问题):
var data = (IQueryable<MyType>)(List<MyType>)Application["MyData"];
Run Code Online (Sandbox Code Playgroud)
我没有考虑这是否有效,但我注意到Visual Studio中没有错误,我能够编译代码而没有错误,所以我认为它会起作用.但在我发布Web应用程序并去查看页面后,我收到了以下错误(如预期的那样):
无法将类型为'System.Collections.Generic.List`1 [MyType]'的对象强制转换为'System.Linq.IQueryable`1 [MyType]'.
即使Application["MyData"]在编译时不知道类型,我不知道我是否正在尝试转换List<MyType>为IQueryable<MyType>,这是无效的?在这种情况下,为什么我没有收到编译器错误?
该List<T>班是不是密封的,所以编译器无法确定从投List<T>到IQueryable<T>是无效的.
假设您定义了这样的子类
class QueryableList<T> : List<T>, IQueryable<T>
{
...
}
Run Code Online (Sandbox Code Playgroud)
然后演员阵容有效.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |