如何将字典项传递给C#中的函数

时间:2013-10-13 00:02:04

标签: c# asp.net-mvc-4 dictionary

我正在编写一个自定义助手来处理嵌套导航菜单。将一组数组(或字典)传递给函数时遇到了一些麻烦。

以下是对ActionMenuItem的Razor调用

@Html.ActionMenuItem("All Reports", "index", "report", "icon-bar-chart", "last", new {"title" = "Report 1", "action" = "report1"}, new {"title" = "Report 2", "action" = "report2"})
public static MvcHtmlString ActionMenuItem(this HtmlHelper htmlHelper, String linkText, String actionName, String controllerName, String iconType = null, string classCustom = null, params Dictionary<string, string> subMenu)

我的功能很好,直到字典项目。 我能够生成单级菜单,但尝试使用嵌套菜单。

任何帮助和课程都非常感谢!

谢谢,

RD

3 个答案:

答案 0 :(得分:1)

你可以这样做:

public static MvcHtmlString ActionMenuItem(
    this HtmlHelper htmlHelper,
    String linkText,
    String actionName,
    String controllerName,
    String iconType = null,
    string classCustom = null,
    params KeyValuePair<string, string>[] subMenus)
{ ... }

var dict = new Dictionary<string, string>()
{
    { "a", "b" },
    { "c", "d" },
};

*.ActionMenuItem(*, *, *, *, *, dict.ToArray());

答案 1 :(得分:0)

您无法使用Dictionary<TKey, TValue>关键字将params声明为参数数组。

根据c#规范:

  

使用params修饰符声明的参数是参数数组。如果一个   形式参数列表包含一个参数数组,它必须是最后一个   列表中的参数和它必须是一维数组   型

Dictionary不是一维数组

您可以创建一个包含两个属性的类:TitleAction,并将参数类型更改为MyClass[]而不是字典。

答案 2 :(得分:0)

尝试这样的事情:

    @Html.ActionMenuItem(
        "All Reports", 
        "index", 
        "report", 
        "icon-bar-chart", 
        "last", 
        new Dictionary<string, string>[]
        {
            new Dictionary<string, string>()
            {
                { "title", "Report 1" }, 
                { "action", "report1" }
            }, 
            new Dictionary<string, string>()
            {
                { "title",  "Report 2" },
                { "action", "report2" }
            }
        } )

    public static MvcHtmlString ActionMenuItem(
        this HtmlHelper htmlHelper, 
        string linkText, 
        string actionName, 
        string controllerName, 
        string iconType = null, 
        string classCustom = null, 
        params Dictionary<string, string>[] subMenu)