@@ -14,9 +14,12 @@ public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> sour
14
14
{
15
15
if ( source == null ) throw Error . ArgumentNull ( "source" ) ;
16
16
if ( predicate == null ) throw Error . ArgumentNull ( "predicate" ) ;
17
- if ( source is Iterator < TSource > ) return ( ( Iterator < TSource > ) source ) . Where ( predicate ) ;
18
- if ( source is TSource [ ] ) return new WhereArrayIterator < TSource > ( ( TSource [ ] ) source , predicate ) ;
19
- if ( source is List < TSource > ) return new WhereListIterator < TSource > ( ( List < TSource > ) source , predicate ) ;
17
+ Iterator < TSource > iterator = source as Iterator < TSource > ;
18
+ if ( iterator != null ) return iterator . Where ( predicate ) ;
19
+ TSource [ ] array = source as TSource [ ] ;
20
+ if ( array != null ) return new WhereArrayIterator < TSource > ( array , predicate ) ;
21
+ List < TSource > list = source as List < TSource > ;
22
+ if ( list != null ) return new WhereListIterator < TSource > ( list , predicate ) ;
20
23
return new WhereEnumerableIterator < TSource > ( source , predicate ) ;
21
24
}
22
25
@@ -41,9 +44,12 @@ public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSo
41
44
{
42
45
if ( source == null ) throw Error . ArgumentNull ( "source" ) ;
43
46
if ( selector == null ) throw Error . ArgumentNull ( "selector" ) ;
44
- if ( source is Iterator < TSource > ) return ( ( Iterator < TSource > ) source ) . Select ( selector ) ;
45
- if ( source is TSource [ ] ) return new WhereSelectArrayIterator < TSource , TResult > ( ( TSource [ ] ) source , null , selector ) ;
46
- if ( source is List < TSource > ) return new WhereSelectListIterator < TSource , TResult > ( ( List < TSource > ) source , null , selector ) ;
47
+ Iterator < TSource > iterator = source as Iterator < TSource > ;
48
+ if ( iterator != null ) return iterator . Select ( selector ) ;
49
+ TSource [ ] array = source as TSource [ ] ;
50
+ if ( array != null ) return new WhereSelectArrayIterator < TSource , TResult > ( array , null , selector ) ;
51
+ List < TSource > list = source as List < TSource > ;
52
+ if ( list != null ) return new WhereSelectListIterator < TSource , TResult > ( list , null , selector ) ;
47
53
return new WhereSelectEnumerableIterator < TSource , TResult > ( source , null , selector ) ;
48
54
}
49
55
@@ -119,14 +125,14 @@ public IEnumerable<TResult> Select<TResult>(Func<TSource, TResult> selector)
119
125
//
120
126
// This is a workaround implementation that does the "virtual dispatch" manually.
121
127
122
- if ( this is WhereEnumerableIterator < TSource > )
123
- return ( ( WhereEnumerableIterator < TSource > ) this ) . SelectImpl < TResult > ( selector ) ;
128
+ WhereEnumerableIterator < TSource > wei = this as WhereEnumerableIterator < TSource > ;
129
+ if ( wei != null ) return wei . SelectImpl < TResult > ( selector ) ;
124
130
125
- if ( this is WhereArrayIterator < TSource > )
126
- return ( ( WhereArrayIterator < TSource > ) this ) . SelectImpl < TResult > ( selector ) ;
131
+ WhereArrayIterator < TSource > wai = this as WhereArrayIterator < TSource > ;
132
+ if ( wai != null ) return wai . SelectImpl < TResult > ( selector ) ;
127
133
128
- if ( this is WhereListIterator < TSource > )
129
- return ( ( WhereListIterator < TSource > ) this ) . SelectImpl < TResult > ( selector ) ;
134
+ WhereListIterator < TSource > wli = this as WhereListIterator < TSource > ;
135
+ if ( wli != null ) return wli . SelectImpl < TResult > ( selector ) ;
130
136
131
137
// If we got here, then "this" is one of these types:
132
138
//
0 commit comments