gpt4 book ai didi

c# - 为什么 Enum.ToString 不能作为属性参数字符串类型的常量字符串接受?

转载 作者:行者123 更新时间:2023-11-30 19:24:04 24 4
gpt4 key购买 nike

[长话短说]为什么 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)
{
...
}

代码的使用如下;

public static void GetBapulActivityFromTopic(
[ServiceBusTrigger("SomeConstString")] BrokeredMessage message,
TextWriter log)
{
...
}

在上面的用法中,我理解 "SomeConstString" 应该是 const string 类型,因为该值必须是编译时常量。

但为什么 SomeEnum.OneEnumValue.ToString() 不能是编译时常量?

最佳答案

尽管 SomeEnum.OneEnumValue 是一个 const,但根据 C# 语言规范,对其调用方法不是编译时常量表达式。以下是允许的部分列表:

  • Literals (including the null literal).
  • References to const members of class and struct types.
  • References to members of enumeration types.
  • References to const parameters or local variables
  • Parenthesized sub-expressions, which are themselves constant expressions.

在常量表达式中不允许调用方法。有关完整列表,请参阅第 N.19 节。

如果您使用的是 C# 6,则可以使用 nameof operator相反,它会产生一个编译时常量:

const string SomeConstString = nameof(SomeEnum.OneEnumValue);

关于c# - 为什么 Enum.ToString 不能作为属性参数字符串类型的常量字符串接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40947953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com