我需要来自string的类实例来检查它是否具有某些属性。 我试过这样的
Type type = Assembly.GetEntryAssembly().GetType("ClassName");
object entity = Activator.CreateInstance(type);
var tableAttribute = entity.GetType().GetTypeInfo().GetCustomAttribute<TableAttribute>();
但是类型为空?
TestConsoleApp中的整个代码:
using System;
using System.ComponentModel;
using System.Reflection;
namespace AssemblyTest
{
[Description("TestDescription")]
public class TestClass { }
//
public class Program
{
public static void Main(string[] args)
{
Type type = Assembly.GetEntryAssembly().GetType("TestClass");
if(type == null)
Console.WriteLine("Object type is NULL.");
else
Console.WriteLine("Object type has value.");
object entity = Activator.CreateInstance(type);
var tableAttribute = entity.GetType().GetTypeInfo().GetCustomAttribute<DescriptionAttribute>();
}
}
}
答案 0 :(得分:1)
指定类的名称时,必须提供包含其名称空间的完全限定名称。所以这条线需要调整:
Type type = Assembly.GetEntryAssembly().GetType("ClassName");
如果ClassName位于命名空间App.Logic中,则该行应为:
Type type = Assembly.GetEntryAssembly().GetType("App.Logic.ClassName");
因此,鉴于您的更新代码,该行应为:
Type type = Assembly.GetEntryAssembly().GetType("AssemblyTest.TestClass");
我已经测试了它,如果使用包含命名空间信息的完全限定的类名,它确实有用。