解析C#方法参数" params object []"

时间:2014-06-05 18:04:48

标签: c# methods parameters

很简单,我想将objects []参数解析为它的值。如果我传入此值,则返回“{id = 3}”。我想做字符串id = 3 ......这怎么可能?

原因.NET MVC采用这种方式:Url.Action(ActionName,ControllerName,new {id = 3})

我想获得Annonymous Type的值。

GetUrlStringStringObjectArray = (string actionName, string controllerName, **object[] parameters**) =>
{
    Assert.AreEqual<string>(EventsController.Actions.Register.ToString(), actionName, "Url.Action called with an incorrect action.");
    Assert.AreEqual<string>(EventsController.ControllerName, controllerName, "Url.Action called with an incorrect controller.");

    string id = parameters[0].ToString();
    // returns "{ id = 3}"

    if (!String.IsNullOrWhiteSpace(id)) 
        return String.Format("/{0}/{1}/{2}", controllerName, actionName, id);
    else
        return String.Format("/{0}/{1}", controllerName, actionName);
}

2 个答案:

答案 0 :(得分:1)

将您的方法更改为使用RouteValueDictionary而不是对象数组。

var url = GetUrlStringStringObjectArray = (string actionName, string controllerName, RouteValueDictionary parameters) => {
    Assert.AreEqual<string>(EventsController.Actions.Register.ToString(), actionName, "Url.Action called with an incorrect action.");
    Assert.AreEqual<string>(EventsController.ControllerName, controllerName, "Url.Action called with an incorrect controller.");

    string id = parameters["id"].ToString();

    if (!String.IsNullOrWhiteSpace(id)) 
        return String.Format("/{0}/{1}/{2}", controllerName, actionName, id);
    else
        return String.Format("/{0}/{1}", controllerName, actionName);
}

编辑:以下是CSharp中对象初始化程序语法的一些其他资源

编辑(2): 我将保留上面的其他代码但是如果你试图对使用UrlHelper扩展的东西进行单元测试,那就不那么容易了(尽管可以做到)。我不会在这里重新回答,但还有许多其他相关问题。

ASP.NET MVC: Unit testing controllers that use UrlHelper

答案 1 :(得分:0)

我的同事帮助了我。这正是我想要做的。它是匿名类型。使用反射我可以得到一个对象的值。

values.GetType()。GetProperties()[0] .GetValue(values,null)