c# - 在 C# 中创建泛型方法

标签 c# generics

我正在尝试将一堆类似的方法组合成一个通用方法。我有几种返回查询字符串值的方法,如果该查询字符串不存在或格式不正确,则返回 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/

相关文章:

c# - Visual Studio 发布对话框需要很长时间才能出现

c# - 复制大文件时Forms application "Not Responding"?

javascript - 从javascript中的viewbag属性获取值

Java参数,是否可以允许未指定大小的参数列表?

ios - Swift 协议(protocol)函数重载

c# - 从 .NET 中的 DBPedia 大转储文件中提取内容

c# - 在附加条件下寻找最快路径

c# - 使用循环从列表中获取唯一值,然后添加另一个值

c# - 如何解决Operator '!=' cannot be applyed to operands of type 'T' and 'T'

c# - 具有泛型的约束语法,也从类派生