C # - получить имя объекта? - PullRequest
0 голосов
/ 23 апреля 2011

Извините за неопределенный заголовок, не совсем уверен, как его описать

У меня есть собственный список списков для меню.В 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 я циклически перебираю списки, но я также хочу отобразить имя каждого списка, например,

Блюз - список - блюз Красные - список - красный

a) Можно ли получить имя списка из самого объекта списка?или б) Нужно ли создавать собственный класс для списка цветов, чтобы он содержал строку для имени, а также список

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

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Может быть другой способ получить это, но класс 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 голосов
/ 23 апреля 2011

а)
Нет, вы не можете получить имя из самого списка, потому что у объекта нет имени.То, что вы ищете, это имя переменной, которая содержит ссылку на список, и объект списка не имеет ссылки обратно на переменные, которые содержат ссылки на него.

b)
Существуют разныеспособы решения этой проблемы, но создание пользовательского класса для списка цветов - это хорошее решение, возможно, лучшее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...