我正在尝试将一堆类似的方法组合成一个通用方法。我有几种返回查询字符串值的方法,如果该查询字符串不存在或格式不正确,则返回 null。如果所有类型本身都可以为 null,这将很容易,但我必须对整数和日期使用可为 null 的泛型。
这就是我现在所拥有的。但是,如果数值无效,它将传回 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
缺点是您需要魔法值来表示无效/缺失的查询字符串值。
关于c# - 在 C# 中创建泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2144495/