c# - 用于解析完全限定类型名称的现有类/方法

标签 c# .net reflection

假设我有一个存在于程序集“Foo.Bar”中的类型“Wibble.Wobble”

并且该程序集未加载到主应用程序加载上下文中

是否存在将以下字符串解析为其后续部分的现有公共(public)机制:

"Wibble.Wobble, Foo.Bar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xyz"

问的原因是我需要在运行时加载多种类型,其中一些类型可能在当前加载上下文中。其他人可能需要从外部程序集加载。

我知道如何从当前加载上下文加载类型 Type.GetType("typename"),我知道如何加载程序集并从中获取类型 Assembly.LoadFile( "xyz").GetType("abc")。我遇到的问题是,如果您尝试从程序集中加载类型,它不应该是完全限定的名称,而在使用 Type.GetType 时可以。

解决方案本身应该没有那么复杂,它只是在第一个逗号之前拆分字符串。但是,我想知道是否有一种方法可以将完全限定名称作为对象表示形式,这样我就不必这样做了,它有助于找到正确的程序集,而不必遍历整个目录。

最佳答案

在我深入研究之后,我认为框架中没有任何公开可用的东西可以做到这一点。我希望有人向我展示不同之处,因为我更喜欢使用由比我更了解框架的人测试和编写的(或应该)更好的核心功能。

因此,我推出了自己的强类型 TypeName 对象。

class TypeName
{
    public TypeName(string name)
    {
        var index = name.LastIndexOf(',');
        if (index > 0)
        {
            Name = name.Substring(0, index).Trim();

            AssemblyName = new AssemblyName(name.Substring(index + 1).Trim());
        }
        else
        {
            Name = name;    
        }
    }

    public string Name { get; private set; }

    public AssemblyName AssemblyName { get; private set; }
}

该对象接受一个字符串,它应该是类型名称或完全限定的类型名称。如果它是完全限定的类型名称,则使用 AssemblyName 类设置 AssemblyName 属性,否则将其保留为 null。

关于c# - 用于解析完全限定类型名称的现有类/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933646/

相关文章:

go - 有没有办法动态地收集给定结构类型的实例?

c# - WebClient是下载http数据的最佳方式吗?

c# - 如何在文本框中使用\n

c# - 使用复选框在 ListBox 中加载数据

c# - 如何使用反射生成直接调用包装器字节码?

c# - 如何搜索各种类型的属性

c# - Entity Framework : Dependencies due to foreign key constraints

c# - 检查对象是否是通用集合

c# - 调用另一个线程函数然后返回值

.net - 推荐一个开源的.NET统计库