public Class1()
    {
        var test = new SubClass1();

        var lookup = new Dictionary <Type, Action <object> >
        {
            { typeof(SubClass1), o => ((SubClass1)o).SomeMethod1() },
            { typeof(SubClass2), o => ((SubClass2)o).SomeMethod2() }
        };


        lookup[test.GetType()](test);
    }
    public Class1()
    {
        var test = new SubClass1();

        var lookup = new Dictionary <Type, Action <object> >
        {
            { typeof(SubClass1), o => ((SubClass1)o).SomeMethod1() },
            { typeof(SubClass2), o => ((SubClass2)o).SomeMethod2() }
        };

        //probably best to check the type exists in the dictionary first,
        //maybe wrap up the execution into a class of it's own so it's abstracted away
        lookup[test.GetType()](test);
    }