using System; using System.Collections.Generic; using System.Globalization; using System.Linq; namespace CadParamPluging.Common { [Serializable] public class ParamBag { public List Items { get; set; } public ParamBag() { Items = new List(); } public void Set(string key, string value) { if (string.IsNullOrWhiteSpace(key)) { return; } if (Items == null) { Items = new List(); } var existing = Items.FirstOrDefault(x => string.Equals(x.Key, key, StringComparison.OrdinalIgnoreCase)); if (existing == null) { Items.Add(new ParamValue { Key = key.Trim(), Value = value }); } else { existing.Value = value; } } public string GetString(string key) { if (string.IsNullOrWhiteSpace(key) || Items == null) { return null; } return Items.FirstOrDefault(x => string.Equals(x.Key, key.Trim(), StringComparison.OrdinalIgnoreCase))?.Value; } public double GetDouble(string key, double fallback = 0) { var s = GetString(key); if (string.IsNullOrWhiteSpace(s)) { return fallback; } if (double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out var v)) { return v; } if (double.TryParse(s, NumberStyles.Float, CultureInfo.CurrentCulture, out v)) { return v; } return fallback; } public int GetInt(string key, int fallback = 0) { var s = GetString(key); if (string.IsNullOrWhiteSpace(s)) { return fallback; } if (int.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out var v)) { return v; } if (int.TryParse(s, NumberStyles.Integer, CultureInfo.CurrentCulture, out v)) { return v; } return fallback; } public bool GetBool(string key, bool fallback = false) { var s = GetString(key); if (string.IsNullOrWhiteSpace(s)) { return fallback; } if (bool.TryParse(s, out var v)) { return v; } if (string.Equals(s, "1", StringComparison.OrdinalIgnoreCase) || string.Equals(s, "是", StringComparison.OrdinalIgnoreCase)) { return true; } if (string.Equals(s, "0", StringComparison.OrdinalIgnoreCase) || string.Equals(s, "否", StringComparison.OrdinalIgnoreCase)) { return false; } return fallback; } /// /// 检查参数是否存在且有有效值 /// public bool Has(string key) { var s = GetString(key); return !string.IsNullOrWhiteSpace(s); } /// /// 获取可空的 double 值,参数不存在或无效时返回 null /// public double? GetDoubleOrNull(string key) { var s = GetString(key); if (string.IsNullOrWhiteSpace(s)) { return null; } if (double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out var v)) { return v; } if (double.TryParse(s, NumberStyles.Float, CultureInfo.CurrentCulture, out v)) { return v; } return null; } /// /// 获取所有已设置的参数Key列表 /// public IEnumerable GetKeys() { if (Items == null) { return Enumerable.Empty(); } return Items .Where(x => x != null && !string.IsNullOrWhiteSpace(x.Key)) .Select(x => x.Key); } } [Serializable] public class ParamValue { public string Key { get; set; } public string Value { get; set; } } }