Check parameters and add friendly exceptions.

This commit is contained in:
PMExtra
2020-04-02 17:29:24 +08:00
parent aafd4ea658
commit 763d9778bb
@@ -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);
}
}
}
}