Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 获取对象名?_Asp.net Mvc 3_C# 4.0 - Fatal编程技术网

Asp.net mvc 3 获取对象名?

Asp.net mvc 3 获取对象名?,asp.net-mvc-3,c#-4.0,Asp.net Mvc 3,C# 4.0,很抱歉,没有具体的标题,不完全确定如何描述它 我有一个菜单的自定义列表。编目员有一个枚举器,所以我可以循环遍历其中的颜色列表 public class CatalogueMenu { private List<List<MenuItem>> MenuList = new List<List<MenuItem>>(); public List<MenuItem> Reds { get; private set; }

很抱歉,没有具体的标题,不完全确定如何描述它

我有一个菜单的自定义列表。编目员有一个枚举器,所以我可以循环遍历其中的颜色列表

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我可以从实际的列表对象本身获取列表名称吗? 或 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>
a 不,不能从列表本身获取名称,因为对象没有名称。您要查找的是包含对列表的引用的变量的名称,而列表对象没有对包含对它的引用的变量的引用

b
有不同的解决方法,但是为颜色列表创建自定义类是一个很好的解决方案,也许是最好的。

可能有不同的方法来解决这个问题,但是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);
}

名称现在将包含红色、蓝色等。

您当然可以在运行时获得对象的名称;这就是所谓的。不过,仍在研究问题的其余部分意味着什么。@Albert Perrien:不,对象没有名称。您可以使用反射来获取包含对对象引用的属性的名称,但只能通过循环遍历属性并获取它们的值来将它们与对象的引用进行比较。@Albert:假设该名称表示引用它的变量的名称,我不得不怀疑它是否可能以及它是否有意义。一个对象的名称是不存在的——对于一个给定的对象,有任何数字,包括零个引用它的名称。顺便说一句,找到它们是非常昂贵的。顺便说一句,这个数字与对象的实际引用数量无关。我明白了,我把对象的名称和对象的类型搞混了。在运行时无法识别单个对象。仍然掌握着C语言。谢谢大家的评论。这正是我想要的,我希望我能更直接地完成它,而不需要建立单独的列表,但哦,好吧。我想我可能可以将它构建到CatalogeMenu中,这样我就可以做CatalogeMenu.GetNames之类的事情。可能有点过头了,但我很高兴学习: