很简单,我想将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);
}
答案 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扩展的东西进行单元测试,那就不那么容易了(尽管可以做到)。我不会在这里重新回答,但还有许多其他相关问题。
答案 1 :(得分:0)
我的同事帮助了我。这正是我想要做的。它是匿名类型。使用反射我可以得到一个对象的值。
values.GetType()。GetProperties()[0] .GetValue(values,null)