【问题标题】:Read referenced namespaces from Type从 Type 中读取引用的命名空间
【发布时间】:2010-12-15 21:37:05
【问题描述】:

我需要一种通过反射检查类型使用的所有命名空间的方法。

namespace My.Program.BaseTypes
{
    using System;
    using System.Text;
    using My.Program.Extenders;
    using My.Program.Helpers;
    using My.Program.Interfaces;

    public class MyTypeBase
    {
        public MyTypeBase()
        {
        }

        public My.Program.Helpers.HelperTypeX X
        {
            get;
            set;
        }

        public My.Program.Extenders.ExtenderTypeY Y
        {
            get;
            set;
        }

        public My.Program.Interfaces.InterfaceZ IZ
        {
            get;
            set;
        }
    }
}

我的代码中只有 MyTypeBase 的 Type,需要通过反射找出 MyTypeBase 中所有属性的所有引用命名空间。

当然我可以遍历所有属性,从中获取类型并检查它们的命名空间,但是有没有更简洁的方法来实现这个目标?

为了避免这个问题,它是为了编写一个生成器,它应该基于一些遗留代码创建新的类。

【问题讨论】:

    标签: c# reflection namespaces


    【解决方案1】:

    不,我想不出更清洁的方法。没有使用一堆命名空间的类型本身的真正概念 - 它有自己引用类型的成员(在属性/返回类型、字段类型、事件处理程序类型、嵌套类的类型或参数类型中)但是这些只是个人成员。

    从好的方面来说,使用 LINQ 应该不难做到......类似:

    var namespaces = type.GetProperties()
                         .Select(p => p.PropertyType.Namespace)
                         .Distinct();
    

    请注意,这不会获取索引器参数类型的命名空间。

    【讨论】:

    • 我想到了这样的事情,需要更快地阅读你的书才能接触到 linq 和 lambda 表达式;-)
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 2017-10-17
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多