Converting objects to type Bool The following extension method is being used in our code base:

public static bool ToBool(this object src)
{
    return src != null &amp;&amp; ((string) src).ToBool(false);
}


It leverages off another extension method:

public static bool ToBool(this string src, bool defaultValue)
{
    if (src.IsEmpty())
        return defaultValue;

    if (src.IsNumeric())
        return src.ToInt() != 0;

    var ret = false;
    if (bool.TryParse(src, out ret))
        return ret;
    return defaultValue;
}


(where the ToInt and all the Is* methods are wrappers around the appropriate objects IsNullEmpty / Parse method)

This does not 'feel' right but I cannot explain it to the author. Besides for the obvious problem of passing an object that cannot be cast to a string what other reasons are there to justify this as bad code?

Are there any other concrete reasons why this code may be good or bad?
I'd criticize:


Extension methods on "object" should be avoided because of the broad scope, except for special cases (which such a "ToBool" method is not one). It also feels like an overuse of extension methods.
The first one takes an "object", but really wants a string, and will blow up with an InvalidCastException at runtime.
The second one does not check for null (which wouldn't be a problem in itself, but having overloads for default values with differing behavior is bad).