传递键/值匿名对象作为参数

时间:2012-08-25 16:19:03

标签: c# model-view-controller .net-4.0

在mvc我可以使用这样的结构

@Html.TextAreaFor(model => model.iEventSummary, new { @class = "test" })

我正在尝试将此new { @class = "test" }重现为参数但未成功

testFunction( new {key1="value1", key2="value2", key3="" })

public static string testFunction(dynamic dict)
{
    string ret = string.Empty;
    IDictionary<string, string> dictionary = dict;
    foreach (var item in dictionary)
    {
        ret += item.Key + item.Value;
    }
    return ret;
}

如何声明方法变量? 如果我想传递new {key1="value1", key2="value2", key3="" }作为参数。

2 个答案:

答案 0 :(得分:5)

您可以使用RouteValueDictionary将匿名对象转换为IDictionary。将您的功能更改为:

public static string TestFunction(object obj)
{
    var dict = new RouteValueDictionary(obj);
    var ret = "";
    foreach (var item in dict)
    {
        ret += item.Key + item.Value.ToString();
    }
    return ret;
}

你可以使用它:

TestFunction(new { key1="value1", key2="value2", key3="" });

答案 1 :(得分:3)

public static string TestFunction(object obj)
{
    //To dictionary
    //var dict = obj.GetType().GetProperties()
    //                .ToDictionary(p=>p.Name,p=>p.GetValue(obj,null));

    //Directly ToString
    string result = String.Join(",", obj.GetType().GetProperties()
                                        .Select(p=>p.Name + ":" + p.GetValue(obj,null)));

    return result;
}