我可以将此方法转换为通用方法吗?

时间:2015-04-20 18:12:42

标签: c# generics

我有两种方法可以将可空参数加载到SqlCommand中;

    public static void LoadParameter<T>(Nullable<T> parameter, string name, SqlCommand cmd) where T : struct
    {
        if (parameter.HasValue)
            cmd.Parameters.AddWithValue(name, parameter);
        else
            cmd.Parameters.AddWithValue(name, DBNull.Value);
    }

    public static void LoadParameter(string parameter, string name, SqlCommand cmd)
    {
        if (!string.IsNullOrEmpty(parameter))
            cmd.Parameters.AddWithValue(name, parameter);
        else
            cmd.Parameters.AddWithValue(name, DBNull.Value);
    }

我的问题是下一个: 我可以只使用一种方法来获得相同的结果吗? 我可以在这个(新的)方法中添加“no Nullables”参数并仍在工作吗? I.E. Int16,Int32,Int64等

谢谢!

2 个答案:

答案 0 :(得分:4)

你可以做到

public static void LoadParameter<T>(T parameter, string name, SqlCommand cmd)
{
    if (parameter != null && !string.Empty.Equals(parameter))
        cmd.Parameters.AddWithValue(name, parameter);
    else
        cmd.Parameters.AddWithValue(name, DBNull.Value);
}

string.Equals如果与非false进行比较,则会返回string,因此此代码应该有效。

答案 1 :(得分:0)

您可以这样做,但检查null不适用于值类型,例如int32将默认为0.您如何找到0是实数值还是空表示。如果您对每种值类型都有特定的大小写,那么您可以使用类似的

public void LoadParameter<T>(T parameter, string name, SqlCommand cmd) { switch (typeof(T).Name) { //TODO: case statements to handle different types. } }