Как сказал tomasmcguinness, ключевое слово as будет работать нормально.Он вернет ноль при неправильном приведении без выдачи ошибки.Если вы хотите иметь выделенный метод, который регистрирует неверные приведения, вы можете сделать что-то вроде этого:
public static T ReturnMeThis<T>(object variable) where T : class
{
T dataOut = variable as T;
if (dataOut == null)
System.Diagnostics.Debug.WriteLine(String.Format("Cannot cast {0} as a {1}", variable.GetType().Name, dataOut.GetType().Name));
return dataOut;
}