2using System.Collections.Generic;
37 public string Name {
get; }
65 : base(name, typeof(T))
234 private readonly Dictionary<string, object> _data =
new();
246 return !_data.TryGetValue(key.
Name, out var value)
270 catch (InvalidCastException ex)
273 $
"Metadata entry '{key.Name}' is not of type {typeof(T).FullName}", ex);
291 catch (KeyNotFoundException ex)
310 return _data.TryGetValue(key.
Name, out value);
327 if (_data.TryGetValue(key.
Name, out var objValue) && objValue is T typedValue)
350 return _data.TryGetValue(name, out value);
356 public IReadOnlyCollection<string>
Keys => _data.Keys;
371 if (_data.ContainsKey(key.
Name) && _data[key.
Name].Equals(value))
376 if (!key.
ValueType.IsInstanceOfType(value))
379 $
"Value for '{key.Name}' must be assignable to {key.ValueType.FullName} (was {value.GetType().FullName})");
382 _data[key.
Name] = value;
393 if (_data.ContainsKey(key) && _data[key].Equals(value))
409 return _data.ContainsKey(key.
Name);
419 return _data.ContainsKey(key);
428 var result =
string.Join(
", ", _data.Select(item => $
"{item.Key} = {item.Value}"));
429 return $
"{nameof(Metadata)}{{ {result} }}";
445 foreach (var kvp
in Keys)
457 private void OnChanged()
459 Changed?.Invoke(
this, EventArgs.Empty);
Exception thrown when an invalid cast or type conversion is attempted.
Exception thrown when a value is outside the valid range.