获取具有指定名称的类型在不同的程序集中但具有相同的名称

时间:2015-07-09 08:02:20

标签: c# reflection types .net-assembly

我需要获取具有指定类名的类型,这些类在不同的程序集中具有相同的名称空间。

例如:

Assembly1

namespace ABCSolution.MyProject.MyCode
{
    public class Class1
    {
    }
}

Assembly2

namespace ABCSolution.MyProject.MyCode
{
    public class Class2
    {
    }
}

在我的情况下,我不知道指定类在运行时属于哪个程序集。所以我使用下面的代码

private Type GetType(string typeName)
        {
            var assemblies = AppDomain.CurrentDomain.GetAssemblies();

            assemblies = assemblies.Where(x => x.FullName.StartsWith("ABCSolution.MyProject.MyCode.", StringComparison.InvariantCulture)).ToArray();

            foreach (var assembly in assemblies)
            {
                Type type = Type.GetType(typeName + ", " + assembly);

                if (type != null)
                {
                    return type;
                }
            }

            return null;
        }
  

var myType = GetType(“ABCSolution.MyProject.MyCode.Class1”);

我的解决方案大部分时间都可以正常工作,但有时会返回null值。我不确定发生了什么,以及我是否使用了正确的方法。

0 个答案:

没有答案