diff --git a/src/YuckQi.Domain.Services/YuckQi.Domain.Services.csproj b/src/YuckQi.Domain.Services/YuckQi.Domain.Services.csproj
index 5bc311c..dbe63d3 100644
--- a/src/YuckQi.Domain.Services/YuckQi.Domain.Services.csproj
+++ b/src/YuckQi.Domain.Services/YuckQi.Domain.Services.csproj
@@ -4,7 +4,7 @@
net6.0
true
Kevin J Lambert
- 6.4.1
+ 6.4.2
LICENSE
A .NET library for bootstrapping a domain services project.
enable
diff --git a/src/YuckQi.Domain.Validation/YuckQi.Domain.Validation.csproj b/src/YuckQi.Domain.Validation/YuckQi.Domain.Validation.csproj
index 8ba0233..5435217 100644
--- a/src/YuckQi.Domain.Validation/YuckQi.Domain.Validation.csproj
+++ b/src/YuckQi.Domain.Validation/YuckQi.Domain.Validation.csproj
@@ -4,7 +4,7 @@
net6.0
true
Kevin J Lambert
- 6.4.1
+ 6.4.2
LICENSE
A .NET library providing domain validation fundamentals.
enable
diff --git a/src/YuckQi.Domain/Extensions/ObjectExtensions.cs b/src/YuckQi.Domain/Extensions/ObjectExtensions.cs
index 16a63fd..a639a68 100644
--- a/src/YuckQi.Domain/Extensions/ObjectExtensions.cs
+++ b/src/YuckQi.Domain/Extensions/ObjectExtensions.cs
@@ -13,7 +13,13 @@ public static class ObjectExtensions
public static Dictionary GetDifferencesByProperty(this T a, T b)
{
var properties = GetObjectProperties(typeof(T));
- var values = properties.Select(t => new KeyValuePair(t, (t.GetValue(a), t.GetValue(b))));
+ var values = properties.Select(t =>
+ {
+ var valueA = a != null ? t.GetValue(a) : null;
+ var valueB = b != null ? t.GetValue(b) : null;
+
+ return new KeyValuePair(t, (valueA, valueB));
+ });
var result = values.Where(t => ! Equals(t.Value.Item1, t.Value.Item2)).ToDictionary(t => t.Key, t => t.Value);
return result;
@@ -22,7 +28,12 @@ public static class ObjectExtensions
public static HashSet GetNonNullProperties(this T a)
{
var properties = GetObjectProperties(typeof(T));
- var values = properties.Select(t => new KeyValuePair(t, t.GetValue(a)));
+ var values = properties.Select(t =>
+ {
+ var valueA = a != null ? t.GetValue(a) : null;
+
+ return new KeyValuePair(t, valueA);
+ });
var result = values.Where(t => t.Value != null).Select(t => t.Key).ToHashSet();
return result;
diff --git a/src/YuckQi.Domain/YuckQi.Domain.csproj b/src/YuckQi.Domain/YuckQi.Domain.csproj
index cbad02a..9a09d41 100644
--- a/src/YuckQi.Domain/YuckQi.Domain.csproj
+++ b/src/YuckQi.Domain/YuckQi.Domain.csproj
@@ -4,7 +4,7 @@
net6.0
true
Kevin J Lambert
- 6.4.1
+ 6.4.2
LICENSE
A .NET library for bootstrapping a domain model project.
enable
diff --git a/test/YuckQi.Domain.UnitTests/Extensions/ObjectExtensionTests.cs b/test/YuckQi.Domain.UnitTests/Extensions/ObjectExtensionTests.cs
index 25b0310..17ff7f8 100644
--- a/test/YuckQi.Domain.UnitTests/Extensions/ObjectExtensionTests.cs
+++ b/test/YuckQi.Domain.UnitTests/Extensions/ObjectExtensionTests.cs
@@ -10,6 +10,25 @@ public class ObjectExtensionTests
[SetUp]
public void Setup() { }
+ [Test]
+ public void Object_WithSomeNonNullProperties_HasExpectedValue()
+ {
+ var a = new { a = new Int32?(), b = 1234, c = "hello", d = new Int64?(9999) };
+ var result = a.GetNonNullProperties();
+
+ Assert.That(result, Has.Exactly(3).Items);
+ Assert.That(result.Select(t => t.Name), Does.Not.Contain("a"));
+ }
+
+ [Test]
+ public void Objects_WhereOneIsNull_HaveAllPropertyDifferences()
+ {
+ var a = new { a = 123, b = "test" };
+ var result = a.GetDifferencesByProperty(default);
+
+ Assert.That(result, Has.Exactly(2).Items);
+ }
+
[Test]
public void Objects_WithDifferentStringValues_HaveOneDifference()
{
@@ -22,14 +41,4 @@ public void Objects_WithDifferentStringValues_HaveOneDifference()
Assert.That(result.Single().Value.Item1, Is.EqualTo("test"));
Assert.That(result.Single().Value.Item2, Is.EqualTo("hello"));
}
-
- [Test]
- public void Object_WithSomeNonNullProperties_HasExpectedValue()
- {
- var a = new { a = new Int32?(), b = 1234, c = "hello", d = new Int64?(9999) };
- var result = a.GetNonNullProperties();
-
- Assert.That(result, Has.Exactly(3).Items);
- Assert.That(result.Select(t => t.Name), Does.Not.Contain("a"));
- }
}