There are a couple of difficulties with this. One is that you can't have

Cast<TFrom, TTo>(TFrom from) { return (TTo)from; }

Because