【问题标题】:Use Spring.Net ExpressionEvaluator to get a "complex" constant value使用 Spring.Net ExpressionEvaluator 获得一个“复杂”的常量值
【发布时间】:2023-03-10 00:31:01
【问题描述】:

已编辑:对不起,但这个示例正在工作......简化我的问题我找到了问题的根源:const 的类型。在示例中是“int”,而在我的真实代码中是“short”。然后我必须重新提出这个问题:为什么我不能访问一个短常量?我无法更改 const 的类型。


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

public class A {
    public const int A_CONST = 1;
    public class B {
        public const int AB_CONST = 1;
    }
}

现在,当我尝试在 spring.net 的 ExpressionEvaluator 中评估包含 A.B.AB_CONST 的表达式时,我不知道该怎么做。我已经尝试了很多东西,但没有奏效。

我已经注册了A型:

TypeRegistry.RegisterType(typeof(A))

我可以访问 A_CONST

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")

有什么想法吗?

【问题讨论】:

    标签: c# .net spring.net


    【解决方案1】:

    经过一些尝试,我找到了解决方案。我已将 '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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-05
      • 2022-10-20
      • 1970-01-01
      • 2010-10-19
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多