Ang*_*ker 0 c# generics extension-methods c#-3.0
我有以下方法,目前适用于int?变量.我想将它扩展到任何数字可空变量(例如十进制?,双?等等...)
public static bool IsNullOrInvalid(this System.Nullable<int> source)
{
return (source == null || source == -1);
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
棘手的一点就是找出每种情况下"无效"的含义.如果"任何被认为低于数据类型的默认值的值"是可以的,您可以尝试:
public static bool IsNullOrNegative<T>(this T? source)
where T : struct, IComparable<T>
{
return source == null || source.Value.CompareTo(default(T)) < 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:如评论中所述,没有"数字"约束 - 在每个与自身相当的值类型上调用此方法是有效的,例如DateTime.没有办法避免这种情况 - 添加更多约束可能会略微降低设置,但不会完全降低.
至于与-1完全比较,你需要能够为每种类型计算出值"-1".没有通用的方法.您可以为我感兴趣的每种类型手动构建Dictionary<Type, object>"-1",但这将非常难看.
如果-1无效,-2真的有效吗?这对我来说似乎很奇怪.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |