Первый пример не будет работать, потому что A - это A; экземпляр типа B может быть A, но в вашем случае это не так. Приведение прекратится, и вы получите InvalidCastException во время выполнения.
Второй пример будет работать, он будет компилироваться и выполняться так, как вы ожидаете. Но, не зная более подробной информации о вашей реальной проблеме (не фиктивная проблема), я не могу сказать вам, является ли это правильным примером.