using NTDLS.Helpers; namespace ZelWiki.Engine.Function { public class FunctionParameters { private readonly FunctionCall _owner; public FunctionParameters(FunctionCall owner) { _owner = owner; } /// /// /// public List Ordinals { get; set; } = new(); /// /// /// public List Named { get; private set; } = new(); public T Get(string name) { try { var value = Named .FirstOrDefault(o => o.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))?.Value; if (value == null) { var prototype = _owner.Prototype.Parameters.First(o => o.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); return Converters.ConvertTo(prototype.DefaultValue) ?? throw new Exception("值不能为空"); } return Converters.ConvertTo(value) ?? throw new Exception("值不能为空"); } catch (Exception ex) { throw new Exception($"函数 [{_owner.Name}], {ex.Message}"); } } public T Get(string name, T defaultValue) { try { var value = Named .FirstOrDefault(o => o.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))?.Value; if (value == null) { return defaultValue; } return Converters.ConvertTo(value) ?? throw new Exception("值不能为空"); } catch (Exception ex) { throw new Exception($"函数 [{_owner.Name}], {ex.Message}"); } } public List GetList(string name) { try { var values = Named.Where(o => o.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))? .Select(o => Converters.ConvertTo(o.Value) ?? throw new Exception("值不能为空")) ?.ToList(); return values ?? new List(); } catch (Exception ex) { throw new Exception($"函数 [{_owner.Name}], {ex.Message}"); } } } }