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) ...@@ -1520,13 +1520,10 @@ static List<FieldInfo> GetSettableFields(Type t)
int i = 0; int i = 0;
for (; i < ctorParameters.Length; i++) for (; i < ctorParameters.Length; i++)
{ {
if (!String.Equals(ctorParameters[i].Name, names[i], StringComparison.OrdinalIgnoreCase) if (!String.Equals(ctorParameters[i].Name, names[i], StringComparison.OrdinalIgnoreCase))
|| (types[i] != ctorParameters[i].ParameterType break;
#if CSHARP30 var unboxedType = Nullable.GetUnderlyingType(ctorParameters[i].ParameterType) ?? ctorParameters[i].ParameterType;
)) if (unboxedType != types[i] && !(unboxedType.IsEnum && Enum.GetUnderlyingType(unboxedType) == types[i]))
#else
&& !(ctorParameters[i].ParameterType.IsEnum && ctorParameters[i].ParameterType.GetEnumUnderlyingType() == types[i])))
#endif
break; break;
} }
if (i == ctorParameters.Length) if (i == ctorParameters.Length)
......
...@@ -35,23 +35,29 @@ public class ConcreteOrder : Order ...@@ -35,23 +35,29 @@ public class ConcreteOrder : Order
class NoDefaultConstructor class NoDefaultConstructor
{ {
public NoDefaultConstructor(int a, float f, ShortEnum e) public NoDefaultConstructor(int a, int? b, float f, ShortEnum e, ShortEnum? n)
{ {
A = a; A = a;
B = b;
F = f; F = f;
E = e; E = e;
N = n;
} }
public int A { get; set; } public int A { get; set; }
public int? B { get; set; }
public float F { get; set; } public float F { get; set; }
public ShortEnum E { get; set; } public ShortEnum E { get; set; }
public ShortEnum? N { get; set; }
} }
public void TestNoDefaultConstructor() 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.A.IsEqualTo(0);
nodef.B.IsEqualTo(null);
nodef.F.IsEqualTo(0); nodef.F.IsEqualTo(0);
nodef.E.IsEqualTo(ShortEnum.Two); nodef.E.IsEqualTo(ShortEnum.Two);
nodef.N.IsEqualTo(null);
} }
// http://stackoverflow.com/q/8593871 // 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