【问题标题】:How to get a greater of two nullable numbers of any type? [duplicate]如何获得任何类型的两个可空数字中的较大者? [复制]
【发布时间】:2019-07-05 20:14:45
【问题描述】:

如何比较任何类型(int、decimal、float)的两个可空数字并返回两个的大数

我试过了,但它只适用于整数

public static int? Compare(int? value1, int? value2)
{
    if(value1> value2)
    return value1;

    return value2;
}

我试过了,但是你不能在 T 类型的操作数上使用 > 运算符。

public static Compare<T>(T value1, T value2)
{
    if(value1> value2)
    return value1;

    return value2;
}

有什么想法吗?

【问题讨论】:

  • 您的通用论点T 是开放的。它允许 any 类型。如果T 是一个字符串,如何使用找出“更大的选项”?您需要使用 IComparable 将其限制为数据类型。
  • 假设您不是在寻找类似Compare(int? value1, float? value2) 的东西,那么您正在寻找的any 可比较类型的标准副本,包括数字一次(stackoverflow.com/questions/6480577/…)。如果您需要比较不同的类型,那会更有趣 - edit 如果是这样的话。

标签: c# generics


【解决方案1】:

您只能将&gt; 运算符与数字一起使用。对于更通用的方法(例如,如果您还想将该方法用于字符串),您可以使用IComparable 接口:

public static T Compare<T> (T value1, T value2) where T : IComparable<T>
{
    if (value1.CompareTo(value2) > 0)
        return value1;

    return value2;
}

【讨论】:

  • 我会包括空检查并改用 IComparable,尽管最后一个是有争议的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
相关资源
最近更新 更多