2

对这个简单的问题感到羞耻。出于某种原因,我想将所有 asp.net URL 放在一个枚举中。但我得到一个错误:identifer expected

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Admin.Code
{
    public enum url
    {
       /_layouts/Admin/test1.aspx,
       /_layouts/Admin/test2.aspx,
       /_layouts/Admin/test3.aspx
    }

    class AdminUrlSettings
    {
    }
}

谢谢。

4

4 回答 4

3

这是我多次将枚举值转换为“友好字符串”的方法。您还可以使用它来创建“字符串值”枚举。它与 Msonic 的解决方案相同,但该属性内置于框架中。

public enum url
{
   [Description(@"/_layouts/Admin/test1.aspx")] Test1,
   [Description(@"/_layouts/Admin/test2.aspx")] Test2,
   [Description(@"/_layouts/Admin/test2.aspx")] Test3
}

...

public static string GetDescription(this Enum enumValue)
{
    object[] attr = enumValue.GetType().GetField(enumValue.ToString())
            .GetCustomAttributes(typeof (DescriptionAttribute), false);
        if (attr.Length > 0)
            return ((DescriptionAttribute) attr[0]).Description;

        return enumValue.ToString();
}

//usage
Response.Redirect(url.Test1.GetDescription());
于 2012-04-04T16:20:43.057 回答
2

这些不是有效的枚举标识符。您将需要字符串枚举。这是一个例子

您将能够执行以下操作:

public enum url
{
    [StringValue("/_layouts/Admin/test1.aspx")]
    Test1,
    [StringValue("/_layouts/Admin/test2.aspx")]
    Test2,
    [StringValue("/_layouts/Admin/test3.aspx")]
    Test3
}
于 2012-04-04T15:00:24.610 回答
1

C# 中的标识符不能包含/字符。它们仅限于下划线、字母和数字(可能还有@前缀)。要解决此问题,您需要使枚举值有效的 C# 标识符

enum url {
  test1,
  test2,
  test3
}

稍后将这些转换为实际有效的 url 可以通过在值上的 switch 语句来完成

public static string GetRelativeUrl(url u) {
  switch (u) {
    case url.test1:
      return "/_layouts/Admin/test1.aspx";
    case url.test2:
      return "/_layouts/Admin/test2.aspx";
    case url.test3:
      return "/_layouts/Admin/test3.aspx";
    default: 
      // Handle bad URL, possibly throw
      throw new Exception();
  }
}
于 2012-04-04T15:09:19.147 回答
0

枚举实际上并不是这样工作的。有效标识符的工作方式与变量名相同(即字母、数字和不以数字开头的下划线的组合)。为什么不只使用列表:

List<string> urls = new List<string>{"/_layouts/Admin/test1.aspx", "/_layouts/Admin/test2.aspx", "/_layouts/Admin/test3.aspx"}

或使用稍有不同的标识符:

public enum url
{
     layout_Admin_test1,
     layout_Admin_test2,
     layout_Admin_test3
}
于 2012-04-04T15:01:29.697 回答