我正在尝试将一堆类似的方法组合成一个通用方法。我有几种返回查询字符串值的方法,如果该查询字符串不存在或格式不正确,则返回null。如果所有类型 native 均可为空,这将很容易,但是我必须对整数和日期使用可为空的泛型类型。

这就是我现在所拥有的。但是,如果数字值无效,它将传回0,但不幸的是,在我的方案中,该值是有效值。有人可以帮我吗?谢谢!

public static T GetQueryString<T>(string key) where T : IConvertible
{
    T result = default(T);

    if (String.IsNullOrEmpty(HttpContext.Current.Request.QueryString[key]) == false)
    {
        string value = HttpContext.Current.Request.QueryString[key];

        try
        {
            result = (T)Convert.ChangeType(value, typeof(T));
        }
        catch
        {
            //Could not convert.  Pass back default value...
            result = default(T);
        }
    }

    return result;
}

最佳答案

如果您指定要返回的默认值而不是使用default(T)怎么办?

public static T GetQueryString<T>(string key, T defaultValue) {...}

它也使调用起来更容易:
var intValue = GetQueryString("intParm", Int32.MinValue);
var strValue = GetQueryString("strParm", "");
var dtmValue = GetQueryString("dtmPatm", DateTime.Now); // eg use today's date if not specified

缺点是您需要魔术值来表示无效/缺少查询字符串值。

10-01 09:25