c# - 如何在 C# 中使用反射获取类型的完全限定名称

标签 c# .net wpf reflection datamodel

我有一个场景,我需要检查控件的 DataContext 是否正在实现“INotifyPropertyChanged”和另一个名为“ITObject”的接口(interface)。接口(interface)“ITObject”位于其他一些程序集中,实现类称为“TObjectBase”,它有一个名为“TObjectChanged”的事件。

我们不会将他们的程序集添加到我们的项目中,但他们会将我们的程序集添加到我们构建并提供给他们的项目中。

我遇到的问题是,我拥有的唯一信息是这些类/接口(interface)名称的文本表示,仅此而已,但我需要在运行时检查控件的 DataContext 是否正在实现这些接口(interface)并 Hook 到 TObjectChanged 事件并对此使用react。

我尝试使用 Type.GetType("TObjectBase") 来检查它,但我需要完全限定名称,不是吗?因为它们都位于我不知道的不同组件中。此外,IsAssignableFrom("ITObject") 也失败了。

我想知道这里的用户群是否可以帮助我解决这个问题。

最佳答案

您可以加载应用程序域中的所有事件程序集,然后遍历每个程序集的类型以查找名称匹配。但是,如果没有程序集名称,您将无法像您看到的那样使用 Type.GetType()

以下简单程序适合我。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(GetFqTypeName("IMyInterface"));
        Console.ReadKey();
    }

    static String GetFqTypeName(string shortTypeName)
    {
        return AppDomain.CurrentDomain.GetAssemblies()
            .ToList()
            .SelectMany(x => x.GetTypes())
            .Where(x => x.Name == shortTypeName)
            .Select(x => x.FullName)
            .FirstOrDefault();
    }
}

public interface IMyInterface { }

关于c# - 如何在 C# 中使用反射获取类型的完全限定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768587/

相关文章:

c# - 按照可配置的时间表运行任务的最有效方式

.net - 将图像从 SQL 中的 FILESTREAM 流式传输到浏览器的最快方法是什么?

c# - 使选项卡标题灵活地适应 WPF 上的标题文本

c# - 一天中特殊时间图表

c# - 如何在 WPF 中强制 DataGrid 组顺序?

c# - 如何保护 SQL Server 数据库和 c# 管理工具之间的通信?

c# - 集合列表具有不止一种类型的用户定义对象?

c# - 如何将 char 转换为其完整的 Unicode 名称?

c# - asp.net mvc验证问题

.net - WPF 中 Calendar 和 Datepicker 控件之间的区别?