namespace EventBus { public sealed class Properties { internal Dictionary Filter { get; set; } = new Dictionary(); public void Add(string name, string value) { if (Filter.TryGetValue(name, out string val)) Filter[name] = value; else Filter.Add(name, value); } public string this[string name] { get { if (Filter.ContainsKey(name)) return Filter[name]; else return null; } set { if (!Filter.ContainsKey(name)) Filter.Add(name, value); else Filter[name] = value; } } public bool TryGetValue(string name, out string value) => Filter.TryGetValue(name, out value); public int Count => Filter.Count; public void Remove(string name) => Filter.Remove(name); public void Clear() => Filter.Clear(); public IEnumerable Values => Filter.Values; public IEnumerable Names => Filter.Keys; /// /// 比较两个属性是否相等 /// /// /// internal bool Contains(Properties properties) { if (properties == null) return false; if (properties.Count != Count) return false; foreach (var name in Names) { if (!Filter.TryGetValue(name, out string val)) return false; else if (!val.Contains(properties[name])) return false; } return true; } public static Properties Default => new Properties(); } }