2011-04-22 219 views
0

對不明確的標題,不完全確定如何描述它C# - 獲取對象名稱?

我有一個菜單列表的自定義列表。 CatalogueMenu有一個枚舉這樣我就可以通過顏色列表中環路它

public class CatalogueMenu 
{ 
    private List<List<MenuItem>> MenuList = new List<List<MenuItem>>(); 

    public List<MenuItem> Reds { get; private set; } 
    public List<MenuItem> Blues { get; private set; } 
    public List<MenuItem> Greens { get; private set; } 
    public List<MenuItem> Yellows { get; private set; } 

    public CatalogueMenu() 
    { 
     Reds = new List<MenuItem>(); 
     Blues = new List<MenuItem>(); 
     Greens = new List<MenuItem>(); 
     Yellows = new List<MenuItem>(); 

     MenuList.Add(Reds); 
     MenuList.Add(Blues); 
     MenuList.Add(Greens); 
     MenuList.Add(Yellows); 
    } 

    public IEnumerator<List<MenuItem>> GetEnumerator() 
    { 
     return this.MenuList.GetEnumerator(); 
    } 
} 

public class MenuItem 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

在我MVC3應用程序,我通過列表循環,但我也想顯示每個列表如名稱

藍調 - 列表 - 的 - 布魯斯 紅人 - 列表 - 的 - 紅魔

一)我可以從實際列表對象本身的列表名稱? 或 B)難道我有那麼它包含名稱的字符串創建顏色列表中的自定義類,以及一個清單,以及

<ul> 
@foreach (var itemList in Model) 
{ 
    <li class="listName">**@itemList.Name or something like that?**</li> 
    foreach (var item in itemList) 
    { 
     <li>@Html.ActionLink(
       item.Name, 
       "Browse", 
       "Catalogue", 
       Request.QueryString.ToRouteValueDictionary().AddOrUpdate(**itemList.Name??**, item.ID), 
       null) 
     </li> 
    } 
} 
</ul> 
+0

你當然可以在運行時獲取對象的名稱;這就是所謂的[反射](http://csharp.net-tutorials.com/reflection/introduction/)。儘管如此,仍在研究你的問題的其餘部分。 – 2011-04-22 23:18:32

+0

@Albert Perrien:不,對象沒有名字。您可以使用反射來獲取包含對該對象的引用的屬性的名稱,但只能通過遍歷這些屬性並獲取它們的值來將它們與該對象的引用進行比較。 – Guffa 2011-04-22 23:26:47

+0

@Albert:假設「名稱」的意思是「引用它的變量的名稱」,我不得不懷疑它是可能的並且它是有意義的。沒有這樣的東西作爲一個對象的名稱 - 對於一個給定的對象,有任何數字(包括零)的名稱引用它。順便說一下,發現它們非常昂貴。順便說一下,該數字與實際引用對象的數量無關。 – delnan 2011-04-22 23:28:08

回答

0

可能有不同的方式來獲取此,但TypeDescriptor類(System.ComponentModel)將提供您正在尋找的信息。

var names = new List<string>(); 
var menu = new CatalogueMenu(); 
var descriptors = TypeDescriptor.GetProperties(menu); 

foreach (PropertyDescriptor descriptor in descriptors) 
{ 
    names.Add(descriptor.Name); 
} 

名稱現在將包含「紅人」,「藍調」等

+0

感謝大家的意見。這裏的東西幾乎是我在找的東西(希望我能更直接地做,而不用建立單獨的列表,但是哦)。我想我可以將它構建到CatalogueMenu中,這樣我就可以製作CatalogueMenu.GetNames或其他東西。可能有點超過頂部,但我很開心學習:) – mejobloggs 2011-04-24 11:21:34

0

一)
不,你不能得到名稱來自列表本身,因爲對象沒有名稱。你正在尋找的是包含對列表引用的變量的名稱,並且列表對象沒有引用回包含對它的引用的變量。

b)
有不同的解決方法,但爲顏色列表創建自定義類是一個很好的解決方案,也許是最好的解決方案。