my solution for a typesafe indexer
You can use generics if you don't insist on it being an indexer:

public T GetAttribute&lt;T&gt;(string attribute)
{
    return (T)base.GetAttribute(attribute);
}


I'm not so sure about the other things you're doing. Convert.ChangeType() could just hide errors in your code. If you want to change the type of something, you should know about it and do it explicitly, not try to hide it.

The same applies to your catch. You should never catch (Exception) in library code, handle only the exceptions you know about (in this case, most likely just InvalidCastException). And returning a value that might be the wrong type on failure? That seems dangerous to me as well.