@@ -74,8 +74,8 @@ public ExpressionParser(ParameterExpression[]? parameters, string expression, ob
74
74
_keywordsHelper = new KeywordsHelper ( _parsingConfig ) ;
75
75
_textParser = new TextParser ( _parsingConfig , expression ) ;
76
76
_numberParser = new NumberParser ( parsingConfig ) ;
77
- _methodFinder = new MethodFinder ( _parsingConfig ) ;
78
77
_expressionHelper = new ExpressionHelper ( _parsingConfig ) ;
78
+ _methodFinder = new MethodFinder ( _parsingConfig , _expressionHelper ) ;
79
79
_typeFinder = new TypeFinder ( _parsingConfig , _keywordsHelper ) ;
80
80
_typeConverterFactory = new TypeConverterFactory ( _parsingConfig ) ;
81
81
@@ -1725,29 +1725,34 @@ private bool TryGenerateConversion(Expression sourceExpression, Type destination
1725
1725
1726
1726
private Expression ParseMemberAccess ( Type ? type , Expression ? expression )
1727
1727
{
1728
+ var isStaticAccess = false ;
1728
1729
if ( expression != null )
1729
1730
{
1730
1731
type = expression . Type ;
1731
1732
}
1733
+ else
1734
+ {
1735
+ isStaticAccess = true ;
1736
+ }
1732
1737
1733
1738
int errorPos = _textParser . CurrentToken . Pos ;
1734
1739
string id = GetIdentifier ( ) ;
1735
1740
_textParser . NextToken ( ) ;
1736
1741
1737
1742
if ( _textParser . CurrentToken . Id == TokenId . OpenParen )
1738
1743
{
1739
- if ( expression != null && type != typeof ( string ) )
1744
+ if ( ! isStaticAccess && type != typeof ( string ) )
1740
1745
{
1741
1746
var enumerableType = TypeHelper . FindGenericType ( typeof ( IEnumerable < > ) , type ) ;
1742
1747
if ( enumerableType != null )
1743
1748
{
1744
1749
Type elementType = enumerableType . GetTypeInfo ( ) . GetGenericTypeArguments ( ) [ 0 ] ;
1745
- return ParseEnumerable ( expression , elementType , id , errorPos , type ) ;
1750
+ return ParseEnumerable ( expression ! , elementType , id , errorPos , type ) ;
1746
1751
}
1747
1752
}
1748
1753
1749
1754
Expression [ ] args = ParseArgumentList ( ) ;
1750
- switch ( _methodFinder . FindMethod ( type , id , expression == null , ref expression , ref args , out var methodBase ) )
1755
+ switch ( _methodFinder . FindMethod ( type , id , isStaticAccess , ref expression , ref args , out var methodBase ) )
1751
1756
{
1752
1757
case 0 :
1753
1758
throw ParseError ( errorPos , Res . NoApplicableMethod , id , TypeHelper . GetTypeName ( type ) ) ;
@@ -1764,9 +1769,10 @@ private Expression ParseMemberAccess(Type? type, Expression? expression)
1764
1769
var genericParameters = method . GetParameters ( ) . Where ( p => p . ParameterType . IsGenericParameter ) ;
1765
1770
var typeArguments = genericParameters . Select ( a => args [ a . Position ] . Type ) ;
1766
1771
var constructedMethod = method . MakeGenericMethod ( typeArguments . ToArray ( ) ) ;
1772
+
1767
1773
return Expression . Call ( expression , constructedMethod , args ) ;
1768
1774
}
1769
-
1775
+
1770
1776
return Expression . Call ( expression , method , args ) ;
1771
1777
1772
1778
default :
0 commit comments