Commit 5aad5f40 authored by vosen's avatar vosen

Add support for nullable types and fix c# 3.0 compatibility bug.

parent 4d11174b
......@@ -1520,13 +1520,10 @@ static List<FieldInfo> GetSettableFields(Type t)
int i = 0;
for (; i < ctorParameters.Length; i++)
{
if (!String.Equals(ctorParameters[i].Name, names[i], StringComparison.OrdinalIgnoreCase)
|| (types[i] != ctorParameters[i].ParameterType
#if CSHARP30
))
#else
&& !(ctorParameters[i].ParameterType.IsEnum && ctorParameters[i].ParameterType.GetEnumUnderlyingType() == types[i])))
#endif
if (!String.Equals(ctorParameters[i].Name, names[i], StringComparison.OrdinalIgnoreCase))
break;
var unboxedType = Nullable.GetUnderlyingType(ctorParameters[i].ParameterType) ?? ctorParameters[i].ParameterType;
if (unboxedType != types[i] && !(unboxedType.IsEnum && Enum.GetUnderlyingType(unboxedType) == types[i]))
break;
}
if (i == ctorParameters.Length)
......
......@@ -35,23 +35,29 @@ public class ConcreteOrder : Order
class NoDefaultConstructor
{
public NoDefaultConstructor(int a, float f, ShortEnum e)
public NoDefaultConstructor(int a, int? b, float f, ShortEnum e, ShortEnum? n)
{
A = a;
B = b;
F = f;
E = e;
N = n;
}
public int A { get; set; }
public int? B { get; set; }
public float F { get; set; }
public ShortEnum E { get; set; }
public ShortEnum? N { get; set; }
}
public void TestNoDefaultConstructor()
{
NoDefaultConstructor nodef = connection.Query<NoDefaultConstructor>("select CAST(NULL AS integer) A, CAST(NULL AS real) f, cast(2 as smallint) E").First();
NoDefaultConstructor nodef = connection.Query<NoDefaultConstructor>("select CAST(NULL AS integer) A, CAST(NULL AS integer) b, CAST(NULL AS real) f, cast(2 as smallint) E, cast(null as smallint) n").First();
nodef.A.IsEqualTo(0);
nodef.B.IsEqualTo(null);
nodef.F.IsEqualTo(0);
nodef.E.IsEqualTo(ShortEnum.Two);
nodef.N.IsEqualTo(null);
}
// http://stackoverflow.com/q/8593871
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment