0
任何人都可以解釋ASP.NET MVC框架如何從匿名類型參數(如Html.ActionLink
)中檢索值,其中表示HTML屬性的參數可以作爲匿名類型傳入。我讀它在內部使用反射。我正在尋找僞代碼或例子來更好地理解。ASP.NET MVC框架中的匿名類型參數
任何人都可以解釋ASP.NET MVC框架如何從匿名類型參數(如Html.ActionLink
)中檢索值,其中表示HTML屬性的參數可以作爲匿名類型傳入。我讀它在內部使用反射。我正在尋找僞代碼或例子來更好地理解。ASP.NET MVC框架中的匿名類型參數
它使用RouteValueDictionary珍貴的構造函數,它允許你一個匿名對象轉換成字典:
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);
}
}
}
至於執行而言,你總是可以看看在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);
}
}
}
...
}
正如你可以看到它使用了TypeDescriptor.GetProperties
方法事後檢索匿名對象的所有屬性和它們的值。
您可以通過MVC [Source](http://aspnet.codeplex.com/releases)並親自體驗 – Eranga
感謝您的輸入 –