.net 3.5匿名foreach

时间:2009-10-29 00:11:32

标签: c# .net 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;
}

代码隐藏页面:

  var results = Common.getLogoNav();
  foreach(var nav in results) {
     string test = nav.Name;
  }

2 个答案:

答案 0 :(得分:5)

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

  • 在匿名类的范围内进行循环(大多数情况下,这是方法)
  • 投射到物体并使用反射(慢速且不容易做,除非你做一些表达树魔术)
  • 转换为命名类并返回其实例。
  • (在C#4中)你可以创建一些动态类型的魔法来达到类似的效果,但这与选项2的结构非常相似,带有一些语法糖。

答案 1 :(得分:2)

Jon Skeet写了一篇关于返回匿名类型的entry。我希望你不要用它。