解决PrimativeType.TryParse问题

时间:2009-08-21 23:36:51

标签: c# vb.net parsing

我已经习惯使用TryParse来尝试解析未知类型:

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;

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


解决方案

Hello Again,

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

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 个答案:

答案 0 :(得分:6)

我之前在自己的班级中包含了查询字符串。然后我可以做类似以下的事情:

var qs = new QueryString(Request.QueryString);
bool q = qs.Get<bool>("q");

答案 1 :(得分:2)

将其包装成一个函数。

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

答案 2 :(得分:1)

  1. 发表评论。
  2. 教育大三学生,除非他们提出要求,否则他们不会变得更好,你回答他们的问题。
  3. 以上两点。
  4. 您可以创建一个以更明确的方式执行整个步骤的函数(在滚动条上也可能更容易)并使用它来代替您的单行。代码。