DictionaryExtensions
using System;
using System.Collections.Generic;
namespace Relativity.Transfer
{
public static class DictionaryExtensions
{
public static bool IsEqual<TKey, TValue>(this IDictionary<TKey, TValue> x, IDictionary<TKey, TValue> y)
{
if (x != null) {
if (y != null) {
if (((ICollection<KeyValuePair<TKey, TValue>>)x).Count == ((ICollection<KeyValuePair<TKey, TValue>>)y).Count) {
foreach (KeyValuePair<TKey, TValue> item in (IEnumerable<KeyValuePair<TKey, TValue>>)x) {
if (!y.TryGetValue(item.Key, out TValue value))
return false;
if (!value.Equals(item.Value))
return false;
}
return true;
}
return false;
}
return false;
}
return false;
}
public static Guid GetGuidValue(this IDictionary<string, object> dictionary, string name, Guid defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (ContainsNonNullValue(dictionary, name) && Guid.TryParse(dictionary[name].ToString(), out Guid result))
return result;
return defaultValue;
}
public static Guid? GetNullableGuidValue(this IDictionary<string, object> dictionary, string name, Guid? defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
Guid result;
if (ContainsNonNullValue(dictionary, name) && Guid.TryParse(dictionary[name].ToString(), out result) && result != Guid.Empty)
return result;
return defaultValue;
}
public static string GetStringValue(this IDictionary<string, object> dictionary, string name, string defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (!ContainsNonNullValue(dictionary, name))
return defaultValue;
return dictionary[name].ToString();
}
public static int GetInt32Value(this IDictionary<string, object> dictionary, string name, int defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (ContainsNonNullValue(dictionary, name) && int.TryParse(dictionary[name].ToString(), out int result))
return result;
return defaultValue;
}
public static long GetInt64Value(this IDictionary<string, object> dictionary, string name, long defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (ContainsNonNullValue(dictionary, name) && long.TryParse(dictionary[name].ToString(), out long result))
return result;
return defaultValue;
}
public static double GetDoubleValue(this IDictionary<string, object> dictionary, string name, double defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (ContainsNonNullValue(dictionary, name) && double.TryParse(dictionary[name].ToString(), out double result))
return result;
return defaultValue;
}
public static Uri GetUriValue(this IDictionary<string, object> dictionary, string name, Uri defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (ContainsNonNullValue(dictionary, name))
try {
return new Uri(dictionary[name].ToString());
} catch (ArgumentNullException) {
return null;
} catch (UriFormatException) {
return new Uri(dictionary[name].ToString(), UriKind.Relative);
}
return defaultValue;
}
public static bool GetBooleanValue(this IDictionary<string, object> dictionary, string name, bool defaultValue)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (ContainsNonNullValue(dictionary, name) && bool.TryParse(dictionary[name].ToString(), out bool result))
return result;
return defaultValue;
}
public static TEnum GetEnumValue<TEnum>(this IDictionary<string, object> dictionary, string name, TEnum defaultValue) where TEnum : struct
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (ContainsNonNullValue(dictionary, name) && Enum.TryParse(dictionary[name].ToString(), out TEnum result))
return result;
return defaultValue;
}
private static bool ContainsNonNullValue(IDictionary<string, object> dictionary, string name)
{
return dictionary.ContainsKey(name) && dictionary[name] != null;
}
}
}