C# 使用Spring.Net ExpressionEvaluator获取一个;复杂的;定值

C# 使用Spring.Net ExpressionEvaluator获取一个;复杂的;定值,c#,.net,spring.net,C#,.net,Spring.net,编辑:抱歉,但此示例正在运行。。。简化我的问题,我找到了问题的根源:常数的类型。在示例中是“int”,在我的实际代码中是“short”。然后我必须重新表述这个问题:为什么我不能得到一个短常数?我不能改变常量的类型 我想将对象的属性与内部类中定义的常量进行比较。 样本: 现在,当我试图在spring.net的ExpressionEvaluator中计算一个包含A.B.AB_常量的表达式时,我不知道该怎么做。我试过很多东西,但都没用 我注册了A型: TypeRegistry.RegisterTyp

编辑:抱歉,但此示例正在运行。。。简化我的问题,我找到了问题的根源:常数的类型。在示例中是“int”,在我的实际代码中是“short”。然后我必须重新表述这个问题:为什么我不能得到一个短常数?我不能改变常量的类型


我想将对象的属性与内部类中定义的常量进行比较。 样本:

现在,当我试图在spring.net的ExpressionEvaluator中计算一个包含A.B.AB_常量的表达式时,我不知道该怎么做。我试过很多东西,但都没用

我注册了A型:

TypeRegistry.RegisterType(typeof(A))
我可以访问一个常数

ExpressionEvaluator.GetValue(null, "A.A_CONST")
但是对于A.B类,它不起作用。我尝试使用“.”和“+”用别名注册该类型。通过不同的方式访问它,但没有一种方式对我有效

TypeRegistry.RegisterType(typeof(A.B))
ExpressionEvaluator.GetValue(null, "A.B.AB_CONST")
ExpressionEvaluator.GetValue(null, "A+B.AB_CONST")


TypeRegistry.RegisterType("AB", typeof(A.B))
ExpressionEvaluator.GetValue(null, "AB.AB_CONST")

TypeRegistry.RegisterType("A.B", typeof(A.B))
ExpressionEvaluator.GetValue(null, "A.B.AB_CONST")
ExpressionEvaluator.GetValue(null, "A+B.AB_CONST")

有什么想法吗?

经过几次尝试,我找到了解决办法。我将“const”替换为“static”,它终于可以工作了:

类常量定义:

public class A {
    public static short A_CONST = 1;
    public class B {
        public static short AB_CONST = 1;
    }
}
明确注册类型:

TypeRegistry.RegisterType(typeof(A));
TypeRegistry.RegisterType(typeof(A.B));
通过ExpressionEvaluator动态访问常量:

object result = ExpressionEvaluator.GetValue(null, "A.A_CONST");
Assert.AreEqual(A.A_CONST, result);

result = ExpressionEvaluator.GetValue(null, "A.B.AB_CONST");
Assert.AreEqual(A.B.AB_CONST, result);
object result = ExpressionEvaluator.GetValue(null, "A.A_CONST");
Assert.AreEqual(A.A_CONST, result);

result = ExpressionEvaluator.GetValue(null, "A.B.AB_CONST");
Assert.AreEqual(A.B.AB_CONST, result);