Improved with support for casting (ToString(), Convert.ToInt32(), Convert.ToDouble(), Convert.ToDecimal()) and added unit tests