使用Reflection获取Full Class Path

时间:2013-07-16 08:28:32

标签: c#

我尝试获取给定类名的完整命名空间路径 例如 输入类名=“ABC”

位于A.B名称空间

的ABC类

我需要完整的路径,如A.B.ABC

我的输入类型传入字符串,类名为类型

类型t = Type.GetType(“A.B.ABC”);工作

类型t = Type.GetType(“ABC”);不工作

如何在ABC上找到A.B.ABC

代码:

 public partial class UcDataGridView : DataGridView
{
    private string _ClassFullName = "UcDataGridView";

    [Browsable(true), Category("Misc")]
    public string ClassFullName
    {
        get
        { return _ClassFullName; }
        set
        {
            _ClassFullName = value;
            if (!string.IsNullOrEmpty(_ClassFullName))
            {
                ClassType = Type.GetType(_ClassFullName);

                if (ClassType != null)
                {
                    if (ClassType.IsClass)
                    {
                        PropertyInfo[] props = ClassType.GetProperties();
                        foreach (var item in props)
                        {
                            var txtCol = new DataGridViewTextBoxColumn();
                            txtCol.Name = "C" + item.Name;
                            txtCol.HeaderText = item.Name;
                            txtCol.DataPropertyName = item.Name;
                            txtCol.ReadOnly = true;
                            this.Columns.Add(txtCol);
                        }
                    }
                    else
                        this.Columns.Clear();
                }
                else
                    this.Columns.Clear();
            }
            else
                this.Columns.Clear();
            Invalidate();
        }
    }
    private Type ClassType { get; set; }

    public UcDataGridView()
    {
        InitializeComponent();
    }

}

4 个答案:

答案 0 :(得分:2)

这可以通过

来实现
typeof(ABC).FullName

答案 1 :(得分:0)

string fullPathName= typeof(className).AssemblyQualifiedName;

答案 2 :(得分:0)

typeof(_Default).UnderlyingSystemType

答案 3 :(得分:0)

您可以使用Linq扫描程序集中具有相同名称的类:

ClassType = Assembly.GetAssembly(typeof(UcDataGridView)).GetTypes().FirstOrDefault(t => t.Name == _ClassFullName);

您必须确定UcDataGridView在同一个程序集中不会出现多次。