我有一个带有接口 IDialogueAnimation 的公共类打字机。在 DialoguePrinter 类的方法中,我获取了具有 IDialogueAnimation 接口的所有对象。它们以类型的形式出现,我想将它们转换为 IDialogueAnimation。但是,它不会让我收到“InvalidCastException:指定的转换无效”。错误。为什么是这样?谢谢!我已经检查过 Typewriter 和 IDialogueAnimation 是否位于同一个程序集中(这是我尝试搜索解决方案时出现的问题)。IDialogueAnimation GetAnimationInterfaceFormName(string name){ Type parentType = typeof(IDialogueAnimation); Assembly assembly = Assembly.GetExecutingAssembly(); Type[] types = assembly.GetTypes(); IEnumerable<Type> imp = types.Where(t => t.GetInterfaces().Contains(parentType)); foreach (var item in imp) { if (item.Name.ToLower() == name.ToLower()) { return (IDialogueAnimation) item; } } Debug.LogError("Can't find any animation with name " + name); return null;}这是界面public interface IDialogueAnimation{ bool IsPlaying { get; set; } IEnumerator Run(OrderedDictionary wordGroup, float speed);}
1 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
你的item
变量是类型Type
。您无法将 a 强制转换Type
为您的接口,因为该类Type
没有实现您的接口。
您只能将实现接口的类型的实例强制转换为接口,而不是其Type
本身。
如果您想返回该类型的新实例,可以使用Activator.CreateInstance()
以下方法:
if (item.Name.ToLower() == name.ToLower()) { return (IDialogueAnimation) Activator.CreateInstance(item); }
如果类型的构造函数需要参数,那么您还需要为构造函数传递参数。就像是:
return (IDialogueAnimation) Activator.CreateInstance(item, something, something);
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消