diff --git a/src/Avalonia.Base/Data/Converters/FuncValueConverter.cs b/src/Avalonia.Base/Data/Converters/FuncValueConverter.cs
index 9ec600d2bc..2385d4981c 100644
--- a/src/Avalonia.Base/Data/Converters/FuncValueConverter.cs
+++ b/src/Avalonia.Base/Data/Converters/FuncValueConverter.cs
@@ -26,7 +26,7 @@ namespace Avalonia.Data.Converters
///
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
- if (value is TIn || (value == null && TypeUtilities.AcceptsNull(typeof(TIn))))
+ if (TypeUtilities.CanCast(value))
{
return _convert((TIn)value);
}
diff --git a/src/Avalonia.Base/Utilities/TypeUtilities.cs b/src/Avalonia.Base/Utilities/TypeUtilities.cs
index 179ded3549..0978308ef6 100644
--- a/src/Avalonia.Base/Utilities/TypeUtilities.cs
+++ b/src/Avalonia.Base/Utilities/TypeUtilities.cs
@@ -3,6 +3,7 @@ using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Reflection;
+using System.Runtime.CompilerServices;
namespace Avalonia.Utilities
{
@@ -93,6 +94,17 @@ namespace Avalonia.Utilities
return !type.IsValueType || IsNullableType(type);
}
+ ///
+ /// Returns a value indicating whether null can be assigned to the specified type.
+ ///
+ /// The type
+ /// True if the type accepts null values; otherwise false.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static bool AcceptsNull()
+ {
+ return default(T) is null;
+ }
+
///
/// Returns a value indicating whether value can be casted to the specified type.
/// If value is null, checks if instances of that type can be null.
@@ -102,7 +114,7 @@ namespace Avalonia.Utilities
/// True if the cast is possible, otherwise false.
public static bool CanCast(object value)
{
- return value is T || (value is null && AcceptsNull(typeof(T)));
+ return value is T || (value is null && AcceptsNull());
}
///