|
|
@@ -4,6 +4,7 @@ using System.Collections;
|
|
|
using System.Collections.Concurrent;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
+using System.Diagnostics.CodeAnalysis;
|
|
|
using System.Linq;
|
|
|
using System.Linq.Expressions;
|
|
|
using System.Reflection;
|
|
|
@@ -750,19 +751,39 @@ namespace InABox.Core
|
|
|
return !String.IsNullOrWhiteSpace(propname) && sender.OriginalValueList != null && sender.OriginalValueList.ContainsKey(propname);
|
|
|
}
|
|
|
|
|
|
+ public static bool TryGetOriginalValue<T, TType>(this T sender, Expression<Func<T, TType>> property, [NotNullWhen(true)] out TType value) where T : BaseObject
|
|
|
+ {
|
|
|
+ var prop = ((MemberExpression)property.Body).Member as PropertyInfo;
|
|
|
+ if(prop is null || sender.OriginalValueList is null)
|
|
|
+ {
|
|
|
+ value = default;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else if(sender.OriginalValueList.TryGetValue(prop.Name, out var val))
|
|
|
+ {
|
|
|
+ value = CoreUtils.ChangeType<TType>(val);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ value = default;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public static TType GetOriginalValue<T, TType>(this T sender, Expression<Func<T, TType>> property) where T : BaseObject
|
|
|
{
|
|
|
var prop = ((MemberExpression)property.Body).Member as PropertyInfo;
|
|
|
- return prop != null && sender.OriginalValueList != null && sender.OriginalValueList.ContainsKey(prop.Name)
|
|
|
- ? (TType)CoreUtils.ChangeType(sender.OriginalValueList[prop.Name], typeof(TType))
|
|
|
+ return prop != null && sender.OriginalValueList != null && sender.OriginalValueList.TryGetValue(prop.Name, out var value)
|
|
|
+ ? (TType)CoreUtils.ChangeType(value, typeof(TType))
|
|
|
: default;
|
|
|
}
|
|
|
|
|
|
public static TType GetOriginalValue<T, TType>(this T sender, Expression<Func<T, TType>> property, TType defaultValue) where T : BaseObject
|
|
|
{
|
|
|
var prop = ((MemberExpression)property.Body).Member as PropertyInfo;
|
|
|
- return prop != null && sender.OriginalValueList != null && sender.OriginalValueList.ContainsKey(prop.Name)
|
|
|
- ? (TType)CoreUtils.ChangeType(sender.OriginalValueList[prop.Name], typeof(TType))
|
|
|
+ return prop != null && sender.OriginalValueList != null && sender.OriginalValueList.TryGetValue(prop.Name, out var value)
|
|
|
+ ? (TType)CoreUtils.ChangeType(value, typeof(TType))
|
|
|
: defaultValue;
|
|
|
}
|
|
|
|