Ejemplo n.º 1
0
        private static T ParseFirst <T>(IEnumerable <string> toParse, TryParseFunction <T> tryParse)
        {
            foreach (var str in toParse)
            {
                if (tryParse(str, out var parsed))
                {
                    return(parsed);
                }
            }

            return(default);
Ejemplo n.º 2
0
        /// <summary>
        /// This method is syntaxtic sugar for atempting to read a data field
        /// from an XmlNode. This version sets the output variable to its
        /// default value in case of a failed read and can be used for
        /// initializing variables. It can work on any type, but it requires
        /// a tryParse style function that is fed the nodes InnerText
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="node"></param>
        /// <param name="field"></param>
        /// <param name="parser"></param>
        /// <param name="read"></param>
        /// <param name="onError"></param>
        /// <returns></returns>
        public static bool TryGetField <T>(this XmlNode node, string field, TryParseFunction <T> parser, out T read,
                                           T onError = default(T))
        {
            string fieldValue = node[field]?.InnerText;

            if (parser != null && fieldValue != null)
            {
                return(parser(fieldValue, out read));
            }

            read = onError;
            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// This method is syntaxtic sugar for atempting to read a data field
        /// from an XmlNode. This version sets the output variable to its
        /// default value in case of a failed read and can be used for
        /// initializing variables. It can work on any type, but it requires
        /// a tryParse style function that is fed the nodes InnerText
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="node"></param>
        /// <param name="field"></param>
        /// <param name="parser"></param>
        /// <param name="read"></param>
        /// <param name="onError"></param>
        /// <returns></returns>
        public static bool TryGetField <T>(this XmlNode node, string field, TryParseFunction <T> parser, out T read, T onError = default(T))
        {
            if (parser != null)
            {
                XmlNode xmlField = node?[field];
                if (xmlField != null)
                {
                    return(parser(xmlField.InnerText, out read));
                }
            }

            read = onError;
            return(false);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// This method is syntaxtic sugar for atempting to read a data field
        /// from an XmlNode. This version sets the output variable to its
        /// default value in case of a failed read and can be used for
        /// initializing variables. It can work on any type, but it requires
        /// a tryParse style function that is fed the nodes InnerText
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="node"></param>
        /// <param name="field"></param>
        /// <param name="parser"></param>
        /// <param name="read"></param>
        /// <param name="onError"></param>
        /// <returns></returns>
        public static bool TryGetField <T>(this XPathNavigator node, string field, TryParseFunction <T> parser, out T read, T onError = default(T))
        {
            if (parser != null)
            {
                XPathNavigator objField = node?.SelectSingleNode(field);
                if (objField != null)
                {
                    return(parser(objField.Value, out read));
                }
            }

            read = onError;
            return(false);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// This method is syntaxtic sugar for atempting to read a data field
        /// from an XmlNode. This version sets the output variable to its
        /// default value in case of a failed read and can be used for
        /// initializing variables. It can work on any type, but it requires
        /// a tryParse style function that is fed the nodes InnerText
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="node"></param>
        /// <param name="field"></param>
        /// <param name="parser"></param>
        /// <param name="read"></param>
        /// <param name="onerror"></param>
        /// <returns></returns>
        public static bool TryGetField <T>(this XmlNode node, String field, TryParseFunction <T> parser, out T read,
                                           T onError = default(T))
        {
            String fieldValue = null;

            if (!CheckGetField <T>(node, field, ref fieldValue))
            {
                read = onError;
                return(false);
            }

            if (parser != null)
            {
                return(parser(fieldValue, out read));
            }

            read = onError;
            return(false);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Attempts to parse a keyword filter of type <typeparamref name="T"/>,
 /// from the specified <paramref name="op"/> and <paramref name="val"/>.
 /// If <paramref name="val"/> can be parsed into <typeparamref name="T"/> using <paramref name="parseFunction"/>, the function returns <c>true</c>
 /// and the resulting range constraint is stored into <paramref name="range"/>.
 /// </summary>
 /// <param name="range">The <see cref="FilterCriteria.OptionalRange{T}"/> to store the parsed data into, if successful.</param>
 /// <param name="op">The operator for the keyword filter.</param>
 /// <param name="val">The value of the keyword filter.</param>
 /// <param name="parseFunction">Function used to determine if <paramref name="val"/> can be converted to type <typeparamref name="T"/>.</param>
 public static bool TryUpdateCriteriaRange <T>(ref FilterCriteria.OptionalRange <T> range, Operator op, string val, TryParseFunction <T> parseFunction)
     where T : struct
 => parseFunction.Invoke(val, out var converted) && tryUpdateCriteriaRange(ref range, op, converted);