Browse Source

Check parameters and add friendly exceptions.

release/3.x.x
PMExtra 4 years ago
parent
commit
763d9778bb
1 changed files with 14 additions and 2 deletions
  1. +14
    -2
      Source/MQTTnet/Extensions/UserPropertyExtension.cs

+ 14
- 2
Source/MQTTnet/Extensions/UserPropertyExtension.cs View File

@@ -7,12 +7,24 @@ namespace MQTTnet.Extensions
{
public static string GetUserProperty(this MqttApplicationMessage message, string propertyName, StringComparison comparisonType = StringComparison.OrdinalIgnoreCase)
{
return message?.UserProperties?.SingleOrDefault(up => up.Name.Equals(propertyName, comparisonType))?.Value;
if (message == null) throw new ArgumentNullException(nameof(message));
if (propertyName == null) throw new ArgumentNullException(nameof(propertyName));

return message.UserProperties?.SingleOrDefault(up => up.Name.Equals(propertyName, comparisonType))?.Value;
}

public static T GetUserProperty<T>(this MqttApplicationMessage message, string propertyName, StringComparison comparisonType = StringComparison.OrdinalIgnoreCase)
{
return (T) Convert.ChangeType(GetUserProperty(message, propertyName, comparisonType), typeof(T));
var value = GetUserProperty(message, propertyName, comparisonType);

try
{
return (T) Convert.ChangeType(value, typeof(T));
}
catch (Exception ex)
{
throw new InvalidOperationException($"Cannot convert value({value}) of UserProperty({propertyName}) to {typeof(T).FullName}.", ex);
}
}
}
}

Loading…
Cancel
Save