c# - 如何检查泛型类型是否为 IComparable 然后比较是否是?
问题描述
我试图弄清楚如何做类似下面的伪代码:
private void test<T>(T a, T b)
{
if (a is IComparable<T> && b is IComparable<T>)
{
int result = a.CompareTo(b);
// do something with the result
}
else
{
// do something else
}
}
我怎样才能在 C# 中实现这一点?
解决方案
您可以使用is
类型模式将结果分配给变量并使用它来调用Compare
. 您也不需要转换b
为IComparable<T>
,因为CompareTo
接受T
类型的参数(并且已经b
是T
)
if (a is IComparable<T> comparable)
{
int result = comparable.CompareTo(b);
// do something with the result
}
另一种选择是使用IComparable<T>
接口应用通用约束
private void test<T>(T a, T b) where T : IComparable<T>
{
var result = a.CompareTo(b);
// do something with the result
}
推荐阅读
- web - 为什么网络爬虫必须具有这些属性,如鲁棒性、礼貌等
- google-apps-script - .getRangeList 不会从一系列单元格返回值
- google-app-engine - Google Firestore 删除所有超过 x 小时的集合
- java - 在 Docker 容器中运行 maven 时如何修复 javax.net.ssl.SSLException?
- powershell - Powershell 作业和变量
- typescript - 如何检查角度 8 中的下一个行为主题值
- swift - Swift:更改 UINavigationController 视图的高度
- sql-server - 正则表达式仅获取字符串中每个数字的最后一次出现
- wordpress - 插件擦除主题中的自定义帖子模板
- flutter - Flutter TextFormField 装饰