我正在阅读C#文档,我遇到了这些句子:
虽然命名空间名称被分类为表达式,但它没有 评估一个值,因此永远不会是任何一个的最终结果 表达。您不能将命名空间名称传递给方法参数,或 在新表达式中使用它,或将其分配给变量。你只能 将它用作较大表达式中的子表达式。同样如此 对于类型(与System.Type对象不同),方法组名称 (与具体方法不同)
究竟是什么“对类型(与System.Type对象不同)的情况也是如此”是什么意思?你能用System.Type
给我一个例子吗?它与反射有关吗?
“方法组名称”和“具体方法”是什么?
答案 0 :(得分:2)
这意味着并非所有表达式都以值开头。一些表达式是名称空间或类型。
考虑可能出现在右侧的内容:
var foo = some_expression;
大多数表达式都适用于some_expression
,因为大多数表达式都是值。但有些表达方式不是。例如int
或System
var foo = int; // ERROR
然而,类型可以是 值的表达式的一部分:
var foo1 = 42 is int; // foo1 is a bool
var foo2 = typeof(int); // foo2 is a System.Type object
var foo3 = default(int); // foo3 is an int
同样,System
之类的名称空间不是值,但是表达式。您可以使用命名空间表达式来获取其他表达式 - 例如,使用点.
运算符来形成类型表达式。 System.String
是一个类型的表达式。并且,和以前一样,您可以进一步将其写为typeof(System.String)
以获取表达式,该表达式是您可以分配给变量的实际值。
我建议查看在LINQ或Lambda表达式中使用的表达式树,或者在发出IL时设置表达式的方式。这可能真的有助于你掌握语言(和编译器)如何处理表达式以及语法定义的原因。
https://msdn.microsoft.com/en-us/library/system.linq.expressions(v=vs.110).aspx