2

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="" }

4

2 に答える 2

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="" });
于 2012-08-25T16:25:26.603 に答える
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;
}
于 2012-08-25T16:33:08.180 に答える