Tag: constant expression

C#编译器或JIT可以优化lambda表达式中的方法调用吗?

我在另一个StackOverflow问题开始( 在评论中 )的讨论后开始这个问题,我很想知道答案。 考虑以下表达式: var objects = RequestObjects.Where(r => r.RequestDate > ListOfDates.Max()); 在这种情况下,将ListOfDates.Max()的评估移出Where子句会有任何(性能)​​优势,还是1.编译器或2. JIT优化它? 我相信C#只会在编译时进行常量折叠,并且可以认为ListOfDates.Max()在编译时是不可知的,除非ListOfDates本身在某种程度上是常量。 也许还有另一个编译器(或JIT)优化,确保只评估一次?

c#:什么是常量表达式?

我目前正在使用属性。 我经常遇到错误’属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式。 我真的不知道’常数表达’是什么意思。 能够将Func传递给属性(由属性存在时执行的代码所使用)将非常有用。 但是,唉,没有。 我不明白为什么这种类型不能放在程序集元数据中,我认为这是我无法将其传递给属性的原因。 任何人都可以给我任何想法吗?