2

この簡単な質問に恥ずかしい。何らかの理由で、すべてのasp.netURLを列挙型に入れたいと思います。しかし、エラーが発生しました: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 に答える