我尝试获取给定类名的完整命名空间路径 例如 输入类名=“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();
}
}
答案 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
在同一个程序集中不会出现多次。