.net 3.5匿名foreach

phx*_*xis 1 .net c# foreach anonymous-types

我正在尝试循环返回结果的匿名对象的函数的结果.

public static object getLogoNav()
{
  XDocument loaded = XDocument.Load(HttpContext.Current.Request.MapPath("~/App_Data/LOGO_NAV_LINKS.xml"));

  var query = from x in loaded.Elements().Elements()
              select new
              {
                 Name = x.FirstAttribute.Value,
                 Value = x.Value
              };

  return query;
}
Run Code Online (Sandbox Code Playgroud)

代码隐藏页面:

  var results = Common.getLogoNav();
  foreach(var nav in results) {
     string test = nav.Name;
  }
Run Code Online (Sandbox Code Playgroud)

Tam*_*ege 5

你不能在C#3中使用匿名类作为返回类型(对于那个问题是4),并且不能将对象强制转换为匿名类型.你的三个选择是:

  • 在匿名类的范围内执行循环(大多数时候,这是方法)
  • 转换为对象并使用反射(除非你做一些表达式树魔法,否则很慢并且不容易做到)
  • 转换为命名类并返回其实例.
  • (在C#4中)你可以创建一些动态类型的魔法来实现类似的效果,但这与选项2的结果非常相似,带有一些语法糖.