How to get Fully Qualified Name of a Type using Reflection in C#
我有一个场景需要检查控件的DataContext是否正在实现"InotifyPropertyChanged"和另一个名为"ItObject"的接口。接口"ITObject"位于其他程序集中,实现类称为"TobjectBase",它具有一个名为"TobjectChanged"的事件。
我们不会将它们的程序集添加到我们的项目中,而是将我们的程序集添加到我们构建并提供给它们的项目中。
我所拥有的问题是,我所拥有的唯一信息是这些类/接口名称的文本表示,除此之外,我需要在运行时检查控件的DataContext是否正在实现这些接口,并挂接到TobjectChanged事件并对其作出反应。
我尝试使用type.gettype("tobjectbase")来检查它,但我需要完全限定的名称,不是吗?因为它们都位于一个我不知道的不同的组件中。此外,isassignablefrom("itObject")也会失败。
我想知道这里的用户库是否能帮助我。
您可以加载应用程序域中的所有活动程序集,然后遍历每个程序集的类型以查找名称匹配。但是,如果没有程序集名称,就不能像您看到的那样使用
下面的简单程序对我有用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 { } |
尝试使用
你也有
1 |
号