gpt4 book ai didi

c# - 无法将 GetTypes() 转换为接口(interface)

转载 作者:行者123 更新时间:2023-11-30 19:48:33 26 4
gpt4 key购买 nike

我正在扫描特定命名空间以查找实现接口(interface)的类型,并尝试将它们作为该接口(interface)返回,而不仅仅是类型,但我收到了 InvalidCastException

IEnumerable<IGameScript> GetDemos()
{
var results = Assembly.GetExecutingAssembly().GetTypes()
.Where(
x => x.IsClass
&& x.Namespace == "MMOClass.CodeBase.Demos"
&& x.Name.Contains("Demo")
&& x.GetInterfaces().Contains(typeof(IGameScript))
).Select(x => x);

return results.Cast<IGameScript>();
}

更新以响应 Reed 的回答:

IEnumerable<IGameScript> GetDemos()
{
var results = Assembly.GetExecutingAssembly().GetTypes()
.Where(
x => x.IsClass
&& x.Namespace == "MMOClass.CodeBase.Demos"
&& x.Name.Contains("Demo")
&& x.GetInterfaces().Contains(typeof(IGameScript))
).Select(x => Activator.CreateInstance(x) as IGameScript);

return results;
}

最佳答案

您的 LINQ 查询返回实现接口(interface)的类型 ( IEnumerable<System.Type> ) 的集合,而不是该类型对象的集合。

但是,您试图返回 IEnumerable<IGameScript> ,这将是实现该接口(interface)的对象的实例列表。您需要构建实例才能转换为接口(interface)本身。

关于c# - 无法将 GetTypes() 转换为接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5359445/

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