代码之家  ›  专栏  ›  技术社区  ›  regex

为primativeType.typarse工作

  •  2
  • regex  · 技术社区  · 15 年前

    我已经习惯了使用台盼分析未知类型:

    Dim b As Boolean
    Dim qVal As Boolean = If(Boolean.TryParse(Request.QueryString("q").Trim(), b), b, False)
    

    bool b;
    bool qVal = (Boolean.TryParse(Request.QueryString("q").Trim(), out b) ? b : false;
    

    所以,只是好奇是否有人知道比使用三元运算符更好的方法。


    解决方案

    再次问好,

    由于帖子已经关闭,我确信这个解决方案会被隐藏在那里,但是我创建了一个非常酷的类,用我得到的建议来解决上面的问题。只是想把代码放在那里,以防有人偶然发现这个线程并想使用它:

    public static class PrimitiveType
    {
        /// <summary>
        /// This function will return a parsed value of the generic type specified.
        /// </summary>
        /// <typeparam name="valueType">Type you are expecting to be returned</typeparam>
        /// <param name="value">String value to be parsed</param>
        /// <param name="defaultValue">Default value in case the value is not parsable</param>
        /// <returns></returns>
        public static valueType ParseValueType<valueType>(string value, valueType defaultValue)
        {
            MethodInfo meth = typeof(valueType).GetMethod("Parse", new Type[] { typeof(string) });
            if (meth != null)
            {
                try
                {
                    return (valueType) meth.Invoke(null, new object[] { value });
                }
                catch (TargetInvocationException ex)
                {
                    if (ex.InnerException.GetType() == typeof(FormatException) || ex.InnerException.GetType() == typeof(OverflowException))
                    {
                        return defaultValue;
                    }
                    else throw ex.InnerException;
                }
            }
            else
            {
                throw new ArgumentException("Generic type must be a valid Value Type that has a Parse method.");
            }
        }
    }
    

    使用起来很简单。只需传入您期望作为泛型的类型,并提供一个要分析的字符串值和一个默认值,以防字符串不可分析。如果提供类而不是基元类型,则 throw new ArgumentException("Generic type must be a valid Value Type that has a Parse method.");

    3 回复  |  直到 15 年前
        1
  •  6
  •   Neil Barnwell    15 年前

    我以前在自己的类中包装过查询字符串。然后我可以做如下的事情:

    var qs = new QueryString(Request.QueryString);
    bool q = qs.Get<bool>("q");
    
        2
  •  2
  •   shahkalpesh    15 年前

    将它包装成一个函数。

    Function BooleanOrDefault(byval value as string) as Boolean
       dim isBoolean as Boolean, boolValue as Boolean
       dim defaultValue as Boolean = False
    
       isBoolean = Boolean.TryParse(value, out boolValue)
       BooleanOrDefault = IIF(isBoolean, boolValue, defaultValue)
    End Function
    
        3
  •  1
  •   gbjbaanb    15 年前
    1. 发表评论。
    2. 教育孩子们,除非他们问,你回答他们的问题,否则他们不会好起来的。
    3. 以上两个。

    您可以创建一个函数,以更明确的方式完成整个步骤(在ScrolBars上也可能更容易),并使用它代替单行。代码。