相关疑难解决方法(0)

Expression.Quote()做了什么,Expression.Constant()不能做什么?

注意:我知道之前的问题" LINQ的Expression.Quote方法的目的是什么?",但如果你继续阅读,你会发现它没有回答我的问题.

我明白所说的目的Expression.Quote()是什么.但是,Expression.Constant()可以用于相同的目的(除了Expression.Constant()已经使用的所有目的).因此,我不明白为什么Expression.Quote()需要.

为了证明这一点,我写了一个快速的例子,其中一个人习惯使用Quote(见标有感叹号的行),但我使用了Constant它,它同样有效:

string[] array = { "one", "two", "three" };

// This example constructs an expression tree equivalent to the lambda:
// str => str.AsQueryable().Any(ch => ch == 'e')

Expression<Func<char, bool>> innerLambda = ch => ch == 'e';

var str = Expression.Parameter(typeof(string), "str");
var expr =
    Expression.Lambda<Func<string, bool>>(
        Expression.Call(typeof(Queryable), "Any", new Type[] { typeof(char) },
            Expression.Call(typeof(Queryable), "AsQueryable",
                            new Type[] { typeof(char) }, str),
            // …
Run Code Online (Sandbox Code Playgroud)

c# expression-trees

93
推荐指数
2
解决办法
9848
查看次数

如果从S到T存在身份转换,那么S和T必须是同一类型吗?

在6.1.6.在C#语言规范中,有:

隐式引用转换是:

(...)
从任何引用类型到引用类型T,如果它具有隐式标识或引用转换为引用类型T0并且T0具有到T的标识转换.

他们为什么不相反,更简单地说:

从任何引用类型到引用类型T,如果它具有隐式标识或引用转换为T.

有什么事实上的区别吗?

编辑:我意识到我错误地输入了规范,错误可能对问题很重要(规范说"隐式引用转换是"而不是"存在隐式转换")

c# language-specifications

12
推荐指数
1
解决办法
316
查看次数