C# 无法将RuntimeType转换为泛型类型

C# 无法将RuntimeType转换为泛型类型,c#,C#,我正在构造一个类型开关来更改WPV和MVVM中的视图,因此此类型开关如下所示: public class TypeSwitch { readonly Dictionary<Type, Action<object>> matches = new Dictionary<Type, Action<object>>(); public TypeSwitch Case<TType>(Action<TType> act

我正在构造一个类型开关来更改WPV和MVVM中的视图,因此此类型开关如下所示:

public class TypeSwitch
{
    readonly Dictionary<Type, Action<object>> matches = new Dictionary<Type, Action<object>>();

    public TypeSwitch Case<TType>(Action<TType> action)
    {
        matches.Add(typeof(TType), type =>
        {
            try
            {
                action((TType)type);
            }
            catch (Exception ex)
            {
                Console.Write(ex); // invalid cast exception runtime type to other
            }
        });
        return this;
    }

    public void Switch(Type type)
    {
        matches[type](type);
    }
}
    public ICommand PreviousStepCommand => new Command(p =>
    {
        Type activeWizardStep = this.WizardStepContext.GetType().UnderlyingSystemType;
        TypeSwitch step =
            new TypeSwitch()
                .Case((RawEventDataFileStep type) =>
                {
                    this.WizardStepContext = this.AddAdditionalInfoStepContext;
                    this.LabelFullTitle = $"{labelTitle}, {this.AddAdditionalInfoStepContext.StepTitle}";
                })
                .Case((RawEventDataAdditionalInfoStep type) => Logger.Warn("Next button in raw event data wizzard shold be disabled on last step"));
        Logger.Info($"Switching from {activeWizardStep} to next step");
        step.Switch(activeWizardStep);
    });

所以基本上我被卡住了,我做错了什么?

看起来你在传递一个
Type
这里:
匹配[Type](Type)当您可能应该传递其他内容时。毕竟,如果我们声明
type=typeof(Bus)然后我们有一个对象(
类型
)描述
总线
对象的外观。我们无法通过强制转换将该描述转换为实际的
总线
(即
(总线)类型;
不起作用)。@Llama同意-在某个地方,需要使用对象;我可能希望
开关(objectobj)=>匹配[obj.GetType](obj)操作:您打算转换什么,如何指定?似乎switched应该被定义为Marc建议的,或者可能被定义为
公共无效开关(Type-Type,object-obj)
,或者没有什么可以转换的。我不想这么说,但是:难道不能用一个简单的
开关
块或表达式来更方便、更有效地替换整个东西吗?或者甚至仅仅是多态性(如:a
virtual
/
abstract
方法)?@Llama是的,您是对的,在switch方法中,我应该获取对象而不是类型,当调用时,我正在传递现有的类实例。现在它起作用了,哦,瞎了我的眼睛。