You*_*jae 3 c# string enums constants
[TL;DR]const string SomeConstString = SomeEnum.OneEnumValue.ToString();即使可以在编译时处理,为什么在 C# 中不允许?
以下属性定义来自Azure WebJobs SDK;
[AttributeUsage(AttributeTargets.Parameter)]
[DebuggerDisplay("{DebuggerDisplay,nq}")]
public sealed class ServiceBusTriggerAttribute : Attribute
{
private readonly string _queueName;
private readonly string _topicName;
private readonly string _subscriptionName;
/// <summary>
/// Initializes a new instance of the <see cref="ServiceBusTriggerAttribute"/> class.
/// </summary>
/// <param name="queueName">The name of the queue to which to bind.</param>
public ServiceBusTriggerAttribute(string queueName)
{
...
}
Run Code Online (Sandbox Code Playgroud)
代码的用法如下;
public static void GetBapulActivityFromTopic(
[ServiceBusTrigger("SomeConstString")] BrokeredMessage message,
TextWriter log)
{
...
}
Run Code Online (Sandbox Code Playgroud)
在上面的用法中,我理解"SomeConstString"应该是const string类型,因为值必须是编译时常量。
但为什么SomeEnum.OneEnumValue.ToString()不能是编译时常量呢?
尽管SomeEnum.OneEnumValue是const,但根据 C# 语言规范,对其调用方法并不是编译时常量表达式。以下是允许的部分列表:
- 文字(包括
null文字)。const对类和结构类型成员的引用。- 对枚举类型成员的引用。
const对参数或局部变量的引用- 带括号的子表达式,它们本身就是常量表达式。
常量表达式中不允许方法调用。完整列表请参见第 N.19 节。
如果您使用的是 C# 6,则可以使用nameof运算符来代替,它会生成一个编译时常量:
const string SomeConstString = nameof(SomeEnum.OneEnumValue);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1126 次 |
| 最近记录: |