2012-04-04 3 views
2

この簡単な質問に恥ずかしがります。何らかの理由で、すべてのasp.net URLを列挙型に入れたいと思います。しかし、私はエラーを得た:identifer expectedURLの列挙を作成してください - エラー:識別子が必要です

マイコード:

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 
    { 
    } 
} 

感謝。

+0

これを試してください。それらをリストに入れてください。 – Oliver

答えて

1

識別子は/文字を含めることはできません理由だけではなく、リストを使用していません。アンダースコア、文字、数字に限定されています(おそらく@という接頭辞)。値の上にあなたが列挙型の値を確認する必要があり、この有効な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(); 
    } 
} 
+0

プロパティ(set; get)を使用できますか? –

+0

@Love確かに、上記のメソッドに相当するプロパティを作成することができます – JaredPar

1

これらは有効な列挙型識別子ではありません。文字列の列挙が必要です。ここでは、このような何かを行うことができるようになりますexample

です:

public enum url 
{ 
    [StringValue("/_layouts/Admin/test1.aspx")] 
    Test1, 
    [StringValue("/_layouts/Admin/test2.aspx")] 
    Test2, 
    [StringValue("/_layouts/Admin/test3.aspx")] 
    Test3 
} 
+0

StringValueAttributeはビルトインではありませんが、DescriptionAttributesでまったく同じことができます。 – KeithS

0

列挙型は、実際にそのように動作しません。有効な識別子は、変数名と同じように機能します(つまり、数字で始まらない文字、数字、下線の組み合わせ)。

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

またはわずかに異なる識別子を使用します:C#で

public enum url 
{ 
    layout_Admin_test1, 
    layout_Admin_test2, 
    layout_Admin_test3 
} 
+0

「[など]」を削除すると、OPを混乱させるでしょう –

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()); 
関連する問題