return TypeCode.Boolean;
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
bool IConvertible.ToBoolean (IFormatProvider provider)
return TypeCode.Byte;
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
bool IConvertible.ToBoolean (IFormatProvider provider)
+2009-07-27 Miguel de Icaza <miguel@novell.com>
+
+ * Value types implementing IConvertible.ToType now throw an
+ ArgumentNullException if they are passed a null as the
+ "targetType" argument.
+
+ This code can not be put directly in the Convert.ToType method, as
+ this method is used by Convert.ToType (object o, TypeCode tc)
+ which uses null as a target to throw a different kind of error
+ (InvalidCastException).
+
+ Fixes a few more bugs in the Silverlight BCL test suite.
+
+ Additionally, the parameter type has been renamed.
+
2009-07-26 Miguel de Icaza <miguel@novell.com>
* Type.cs: (GetMember) call directly the worker method, instead of
return TypeCode.Char;
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
bool IConvertible.ToBoolean (IFormatProvider provider)
throw new InvalidCastException ();
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- if (type == typeof (string))
+ if (targetType == typeof (string))
return String.Empty;
- if (type == typeof (DBNull))
+ if (targetType == typeof (DBNull))
return this;
throw new InvalidCastException ();
}
throw new InvalidCastException();
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- if (type == null)
- throw new ArgumentNullException ("type");
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
- if (type == typeof (DateTime))
+ if (targetType == typeof (DateTime))
return this;
- else if (type == typeof (String))
+ else if (targetType == typeof (String))
return this.ToString (provider);
- else if (type == typeof (Object))
+ else if (targetType == typeof (Object))
return this;
else
throw new InvalidCastException();
return (UInt64)(Decimal.Truncate (d));
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return Convert.ToType (this, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return Convert.ToType (this, targetType, provider, false);
}
bool IConvertible.ToBoolean (IFormatProvider provider)
return TypeCode.Double;
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
bool IConvertible.ToBoolean (IFormatProvider provider)
return Convert.ToSingle (get_value (), provider);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return Convert.ToType (get_value (), type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return Convert.ToType (get_value (), targetType, provider, false);
}
#if ONLY_1_1
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
#if ONLY_1_1
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
#if ONLY_1_1
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
#if ONLY_1_1
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
ushort IConvertible.ToUInt16 (IFormatProvider provider)
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
#if ONLY_1_1
return Convert.ToSingle (this, provider);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return Convert.ToType (this, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("type");
+ return Convert.ToType (this, targetType, provider, false);
}
#if ONLY_1_1
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
#if ONLY_1_1
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
#if ONLY_1_1
return System.Convert.ToSingle (m_value);
}
- object IConvertible.ToType (Type type, IFormatProvider provider)
+ object IConvertible.ToType (Type targetType, IFormatProvider provider)
{
- return System.Convert.ToType (m_value, type, provider, false);
+ if (targetType == null)
+ throw new ArgumentNullException ("targetType");
+
+ return System.Convert.ToType (m_value, targetType, provider, false);
}
#if ONLY_1_1
Convert.ChangeType (true, TypeCode.Empty);
}
+ [Test]
+ [ExpectedException (typeof (ArgumentNullException))]
+ public void CharChangeTypeNullNull ()
+ {
+ char a = 'a';
+ IConvertible convert = a;
+ convert.ToType (null, null);
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentNullException))]
+ public void StringChangeTypeNullNull ()
+ {
+ string a = "a";
+ IConvertible convert = a;
+ convert.ToType (null, null);
+ }
+
[Test]
// 2005/01/10: The docs say this should throw an InvalidCastException,
// however, MS.NET 1.1 throws a NullReferenceException. Assuming docs