Asp.net mvc 3 ASP.NET MVC框架中的匿名类型参数
有谁能解释ASP.NET MVC framework如何从匿名类型参数中检索值,例如Asp.net mvc 3 ASP.NET MVC框架中的匿名类型参数,asp.net-mvc-3,Asp.net Mvc 3,有谁能解释ASP.NET MVC framework如何从匿名类型参数中检索值,例如Html.ActionLink,其中表示Html属性的参数可以作为匿名类型传入。我读到它在内部使用反射。我正在寻找更好理解的伪代码或示例。它使用了宝贵的构造函数,允许您将匿名对象转换为字典: class Program { static void Main() { var anon = new { foo = "foo value", bar = "bar value" };
Html.ActionLink
,其中表示Html属性的参数可以作为匿名类型传入。我读到它在内部使用反射。我正在寻找更好理解的伪代码或示例。它使用了宝贵的构造函数,允许您将匿名对象转换为字典:
class Program
{
static void Main()
{
var anon = new { foo = "foo value", bar = "bar value" };
IDictionary<string, object> values = new RouteValueDictionary(anon);
foreach (var item in values)
{
Console.WriteLine("{0}, {1}", item.Key, item.Value);
}
}
}
类程序
{
静态void Main()
{
var anon=new{foo=“foo value”,bar=“bar value”};
IDictionary值=新的RouteValueDictionary(anon);
foreach(值中的var项)
{
WriteLine(“{0},{1}”,item.Key,item.Value);
}
}
}
就实现而言,您可以随时查看ASP.NET MVC源代码,但以下是相关部分:
public class RouteValueDictionary : IDictionary<string, object>, ICollection<KeyValuePair<string, object>>, IEnumerable<KeyValuePair<string, object>>, IEnumerable
{
public RouteValueDictionary(object values)
{
this._dictionary = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
this.AddValues(values);
}
private void AddValues(object values)
{
if (values != null)
{
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(values))
{
object obj2 = descriptor.GetValue(values);
this.Add(descriptor.Name, obj2);
}
}
}
...
}
公共类RouteValueDictionary:IDictionary、ICollection、IEnumerable、IEnumerable
{
公共RouteValueDictionary(对象值)
{
this.\u dictionary=新字典(StringComparer.OrdinalIgnoreCase);
这是AddValues(值);
}
私有void AddValues(对象值)
{
如果(值!=null)
{
foreach(TypeDescriptor.GetProperties(值)中的PropertyDescriptor描述符)
{
object obj2=descriptor.GetValue(值);
this.Add(descriptor.Name,obj2);
}
}
}
...
}
正如您所见,它使用TypeDescriptor.GetProperties
方法检索匿名对象的所有属性及其值。您可以通过MVC亲自查看