Alex Rivera | Logout

Invalid cast from 'System.String' to 'System.TimeSpan'

Asked 2011-08-12T10:53:04.790
15

I currently have a Generic method that reads an Value from the database based on a key and returns a specific type of that value.

    public T Get<T>(string key, T defaultValue)
    {
        var myparms = new List<SqlParameter>
                      {
                          new SqlParameter("@KEY", key),
                      };
        const string getPropertyQuery = "SELECT SPARM_VALUE FROM SYSPARAMS WHERE SPARM_KEY = @KEY;";

        var returnedValue = //Get value from Database

        if (returnedValue == null)
        {
            return defaultValue; //Value does not exists so return default.
        }

        return (T)Convert.ChangeType(returnedValue, typeof(T));
    }

But when I try and return a TimeSpan type I get the following exception. Invalid cast from 'System.String' to 'System.TimeSpan'.

After a bit of googling I found that the most common solution is to use the TimeSpan.Parse or TimeSpan.TryParse methods.

I also found TimeSpan Structure.

public struct TimeSpan : IComparable, IComparable, IEquatable, IFormattable

My question is why, why is TimeSpan not able to do this. Is it because it doesn't have the IConvertible interface? Any thoughts on this would be much appreciated.

c#
Edit
Report

1 Answer

1

There isnt an implicit conversion between String and TimeSpan, you need to convert explicitly using Parse or TryParse

answered 2011-08-12T10:56:41.253

Your Answer