use*_*940 2 c# generics nullable
我已经有这个了:
public static object GetDBValue(object ObjectEvaluated)
{
if (ObjectEvaluated == null)
return DBNull.Value;
else
return ObjectEvaluated;
}
used like:
List<SqlParameter> Params = new List<SqlParameter>();
Params.Add(new SqlParameter("@EntityType", GetDBValue(EntityType)));
Run Code Online (Sandbox Code Playgroud)
现在我想保留相同的接口,但扩展它以将其与可为空的一起使用
public static object GetDBValue(int? ObjectEvaluated)
{
if (ObjectEvaluated.HasValue)
return ObjectEvaluated.Value;
else
return DBNull.Value;
}
public static object GetDBValue(DateTime? ObjectEvaluated)
{...}
Run Code Online (Sandbox Code Playgroud)
但我只想要 1 个函数 GetDBValue 用于空值。我该如何做到这一点并保持通话原样?这可能吗?
我可以让它像这样工作:
public static object GetDBValue<T>(Nullable<T> ObjectEvaluated) where T : struct
{
if (ObjectEvaluated.HasValue)
return ObjectEvaluated.Value;
else
return DBNull.Value;
}
Run Code Online (Sandbox Code Playgroud)
但调用更改为:
Params.Add(new SqlParameter("@EntityID ", GetDBValue<int>(EntityID)));
Run Code Online (Sandbox Code Playgroud)
您拥有的通用版本很好,尽管您可以使用空合并运算符进一步缩短它:
public static object GetDBValue<T>(Nullable<T> ObjectEvaluated)
where T : struct
{
return ObjectEvaluated ?? (object)DBNull.Value;
}
Run Code Online (Sandbox Code Playgroud)
您可能会错过的是,在调用它时不需要使用泛型参数;C# 的类型推断将为您解决这个问题:
int? x = null;
object y = GetDBValue(x);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |