-
-
Notifications
You must be signed in to change notification settings - Fork 243
Labels
Description
1. Description
I'm trying to create an Excel-like function syntax using nested static classes. I'm experiencing difficulties with some class names and nested classes. Below is the Fiddle code:
using System;
using System.Collections.Generic;
using System.Linq.Dynamic.Core;
using System.Linq.Dynamic.Core.CustomTypeProviders;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
var config = new ParsingConfig
{
CustomTypeProvider = new CustomTypeProvider(new[] { typeof(IST), typeof(IST.NOT) })
};
// Not working;
var expression = "IS.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
// Working;
expression = "IST.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
// Not working;
expression = "IS.NOT.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
// Not working;
expression = "IST.NOT.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
}
public class CustomTypeProvider : DefaultDynamicLinqCustomTypeProvider
{
private readonly HashSet<Type> _types;
public CustomTypeProvider(Type[] types)
{
_types = new HashSet<Type>(types);
}
public override HashSet<Type> GetCustomTypes()
{
return _types;
}
}
public static class IS
{
public static bool NULL(object value) => value == null;
public static class NOT
{
public static bool NULL(object value) => value != null;
}
}
public static class IST
{
public static bool NULL(object value) => value == null;
public static class NOT
{
public static bool NULL(object value) => value != null;
}
}
}2. Exception
Fiddle output:
IS.NULL(null) failed, because of System.Linq.Dynamic.Core.Exceptions.ParseException with message '(' expected
IST.NULL(null) success
IS.NOT.NULL(null) failed, because of System.Linq.Dynamic.Core.Exceptions.ParseException with message '(' expected
IST.NOT.NULL(null) failed, because of System.Linq.Dynamic.Core.Exceptions.ParseException with message Identifier expected
3. Fiddle
Reactions are currently unavailable