gpt4 book ai didi

C# 将类转换为接口(interface)列表

转载 作者:太空狗 更新时间:2023-10-29 21:13:43 26 4
gpt4 key购买 nike

我正在尝试动态加载一些 .dll 文件。文件是插件(目前是自己编写的),它们至少有一个实现 MyInterface 的类。对于每个文件,我正在执行以下操作:

    Dictionary<MyInterface, bool> _myList;

// ...code

Assembly assembly = Assembly.LoadFrom(currentFile.FullName);
foreach (Type type in assembly.GetTypes())
{
var myI = type.GetInterface("MyInterface");
if(myI != null)
{
if ((myI.Name == "MyInterface") && !type.IsAbstract)
{
var p = Activator.CreateInstance(type);
_myList.Add((MyInterface)p, true);
}
}
}

运行它会导致转换异常,但我找不到解决方法。无论如何,我想知道为什么这根本不起作用。我正在寻找 .NET Framework 3.5 中的解决方案。

发生在我身上的另一件事是在 p 中添加新条目之前在 _myList 中添加新条目之前在 p 中获取 null上面的代码:

var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;

这段代码是第一次尝试加载插件,我还没有找到为什么pnull。我希望有人能引导我走上正确的道路:)

最佳答案

有更简单的方法来检查您的类型是否可以转换为您的界面。

Assembly assembly = Assembly.LoadFrom(currentFile.FullName);
foreach (Type type in assembly.GetTypes())
{
if(!typeof(MyInterface).IsAssignableFrom(type))
continue;

var p = Activator.CreateInstance(type);
_myList.Add((MyInterface)p, true);
}

如果 IsAssignableFrom 为 false,则说明您的继承有问题,这很可能是您出错的原因。

关于C# 将类转换为接口(interface)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com