为什么我收到“InvalidCastException:指定的转换无效。” 当尝试将类型转换为接口时

我有一个带有接口 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);


}


青春有我
浏览 117回答 1
1回答

米琪卡哇伊

你的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);
打开App,查看更多内容
随时随地看视频慕课网APP