簡體   English   中英

獲取靜態字段的值

[英]Get value of static field

我有以下課程:

public static class Pages
{
    public static string LoggedOut = "LoggedOut.aspx";
    public static string Login = "Login.aspx";
    public static string Home = "Home.aspx";
}

我知道我可以靜態地使用Pages.Home ,但我的問題有一個原因。

我希望有一個方法,我可以像這樣調用:

string pageName = Pages.GetPage("Home");

等等

C'est可能嗎?

謝謝,戴夫

您可以使用以下內容:

var field = typeof(Pages).GetField("Home", BindingFlags.Public | BindingFlags.Static);
var value = (string)field.GetValue(null);

你可以像康拉德建議使用反射一樣。 但我認為使用字典更好的設計,而不是依靠反射來完成這樣的任務。

public static class Pages
{
    private static readonly IDictionary<String, String> PageMap = null;

    private static Pages()
    {
        Pages.PageMap = new Dictionary<String, String>();

        Pages.PageMap.Add("LoggedOut", "LoggedOut.aspx");
        Pages.PageMap.Add("Login", "Login.aspx");
        Pages.PageMap.Add("Home", "Home.aspx");
    }

    public static GetPage(String pageCode)
    {
        String page;
        if (Pages.PageMap.TryGet(pageCode, out page)
        {
            return page;
        }
        else
        {
            throw new ArgumentException("Page code not found.");
        }
    }
}

您當然應該根據實際需求調整錯誤處理。

只是我的tuppence ...如果你打算使用文字(“Home”),那么我絕對會綁定到const ,即Pages.Home (它們應該是給定示例中的常量)。 如果你有以下反思方法可能很方便:

string s = ...something clever...
string page = GetPage(s);

如果切換到const ,那么請注意它們表現為靜態字段:

string s = ...something clever...
FieldInfo field = typeof(Pages).GetField(s,
     BindingFlags.Static | BindingFlags.Public);
string page = (string)field.GetValue(null);

如果它被大量使用,你也可以將它們緩存在字典中。

正如其他人所說,我在這里避免使用反射。 此外,雖然它添加了更多的代碼,硬編碼頁面名稱的枚舉也是一個好主意(以前也建議)

    public enum pages { LoggedOut, Login, Home }

    static Dictionary<pages, string> pageDict = new Dictionary<pages, string>() {
        {pages.Home, "Home.aspx"},
        {pages.Login, "Login.aspx"},
        {pages.LoggedOut, "LoggedOut.aspx"}
    };

    public static string getPage(pages pageName)
    {
        return pageDict[pageName];
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM