【问题标题】:How do I access an anonymous object's properties outside its scope?如何在其范围之外访问匿名对象的属性?
【发布时间】:2012-11-17 20:35:33
【问题描述】:

范围可能不是正确的词。使用以下代码,我无法访问集合元素的对象属性。是否有更好的返回数据类型或访问这些属性的方法?

protected object Modules()
{
    DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/"));
    var folders = from x in di.GetDirectories()
                    where
                    !(new string[] {
                        "app_data","bin","obj","scripts","styles","properties"
                        }).Contains<string>(x.Name.ToLower())
                    select new
                    {
                        Name = x.Name,
                        Path = x.FullName
                    };
    return folders
}

【问题讨论】:

    标签: c# linq anonymous-types var


    【解决方案1】:

    有两种可行的解决方案:

    1. 为它创建一个真正的类。这是首选的解决方案。
    2. 让您的方法返回dynamic 而不是object。这样做的问题是您失去了对使用此方法结果的代码的编译时检查。

    【讨论】:

      【解决方案2】:

      一旦离开定义匿名类型的范围,就必须使用反射来获取其成员。

      我能想到的另外两个选项是使用动态类型(如果使用 4.0 框架或更高版本)或创建定义类型而不是匿名类型。

      【讨论】:

        【解决方案3】:

        我建议简单地创建一个新类型来传递数据。如果数据的范围受到保护,您可以使用受保护的嵌套子类来防止小型数据类的过度增殖。

        【讨论】:

          【解决方案4】:

          请改用IEnumerable&lt;dynamic&gt;

          根据 msdn “动态类型使发生它的操作绕过编译时类型检查。相反,这些操作在运行时解决。动态类型简化了对 COM API 的访问,例如 Office 自动化 API,也适用于 IronPython 库等动态 API,以及 HTML 文档对象模型 (DOM)。”

          http://msdn.microsoft.com/en-us/library/dd264741.aspx

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-15
            • 2010-09-25
            • 1970-01-01
            相关资源
            最近更新 更多