Skip to content

Commit

Permalink
Fix for Issue #131
Browse files Browse the repository at this point in the history
BindingTypeConverters EqualityTypeConverter.DoReferenceCast doesn't
handle nullable values
  • Loading branch information
robhorvath authored and anaisbetts committed Dec 5, 2012
1 parent 21d038c commit 56af287
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 10 deletions.
23 changes: 23 additions & 0 deletions ReactiveUI.Tests/BindingTypeConvertersTest.cs
@@ -0,0 +1,23 @@
using Xunit;

namespace ReactiveUI.Tests
{
public class BindingTypeConvertersTest
{
[Fact]
public void EqualityTypeConverterDoReferenceCastShouldConvertNullableValues()
{
double? nullableDouble = 0.0;
var result = EqualityTypeConverter.DoReferenceCast<double?>(nullableDouble);
Assert.Equal(nullableDouble, result);
}

[Fact]
public void EqualityTypeConverterDoReferenceCastShouldConvertValueTypes()
{
double doubleValue = 0.0;
var result = EqualityTypeConverter.DoReferenceCast<double>(doubleValue);
Assert.Equal(doubleValue, result);
}
}
}
3 changes: 2 additions & 1 deletion ReactiveUI.Tests/ReactiveUI.Tests.csproj
Expand Up @@ -93,6 +93,7 @@
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
<Compile Include="BindingTypeConvertersTest.cs" />
<Compile Include="CommandBindingTests.cs" />
<Compile Include="DependencyObjectObservableForPropertyTest.cs" />
<Compile Include="ErrorsTest.cs" />
Expand Down Expand Up @@ -134,4 +135,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>
20 changes: 11 additions & 9 deletions ReactiveUI/BindingTypeConverters.cs
Expand Up @@ -42,16 +42,18 @@ public bool TryConvert(object from, Type toType, object conversionHint, out obje

public static object DoReferenceCast<T>(object from)
{
#if WINRT
bool isValueType = typeof (T).GetTypeInfo().IsValueType;
#else
bool isValueType = typeof (T).IsValueType;
#endif
if (isValueType) {
return System.Convert.ChangeType(from, typeof (T), null);
} else {
return (T) from;
var t = typeof (T);
var u = Nullable.GetUnderlyingType(t);

if (u == null) {
return (T) Convert.ChangeType(from, t);
}

if (from == null) {
return default(T);
}

return (T) Convert.ChangeType(from, u);
}
}

Expand Down

0 comments on commit 56af287

Please sign in to comment.