expression bodied成员如何区分void和non-void?
How do expression bodied members distinguish between void and non-void?
使用 C# 6 的表达式体成员,我可以写:
public string FullName => $"{_firstName} {_lastName}";
我可以写:
static void Print(string message) => Console.WriteLine(message);
首先,表达式returns something。在第二个,它没有。
它在不需要任何额外语法的情况下确定如何 'act' 发生了什么?或者它只是在编译时查看方法签名的情况?
我不喜欢在不知道发生了什么的情况下把事情留给 'just work'。
首先,FullName
是一个属性。它总是return是一个值。因此,主体的签名应该是 Func<T>
,其中 T
是 return 类型(在您的示例中定义为 string
)或等效的委托。
您的方法 void Print(string message)
的签名是 Action<string>
,因为编译器理解 void 不 return 一个值并采用单个参数。它理解一些语句 return 一个值(如 => "a"
),有些可以独立存在(尽管它们可能 return 一个值如 => new object()
)。因此它可以告诉你是否搞砸了:"CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement".
使用 C# 6 的表达式体成员,我可以写:
public string FullName => $"{_firstName} {_lastName}";
我可以写:
static void Print(string message) => Console.WriteLine(message);
首先,表达式returns something。在第二个,它没有。
它在不需要任何额外语法的情况下确定如何 'act' 发生了什么?或者它只是在编译时查看方法签名的情况?
我不喜欢在不知道发生了什么的情况下把事情留给 'just work'。
首先,FullName
是一个属性。它总是return是一个值。因此,主体的签名应该是 Func<T>
,其中 T
是 return 类型(在您的示例中定义为 string
)或等效的委托。
您的方法 void Print(string message)
的签名是 Action<string>
,因为编译器理解 void 不 return 一个值并采用单个参数。它理解一些语句 return 一个值(如 => "a"
),有些可以独立存在(尽管它们可能 return 一个值如 => new object()
)。因此它可以告诉你是否搞砸了:"CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement".