c# - 如何在 C# 中获取通用数字类型的最大值和最小值

标签 c# generics

我有一个名为 TValue 的泛型类型。 我想做这样的事情:


public TValue Number {get;set;}
public TValue GetMaxNumber()
{
   switch (Number)
   {
       case int @int:
           if (@int == default(int))
           {
               return int.MaxValue;
           }
       case long @long:
           //get max value of long
       case short @short:
           //get max value of short
       case float @float:
           //get max value of float
       case double @double:
           //get max value of double
       case decimal @decimal:
           //get max value of decimal
       default:
           throw new InvalidOperationException($"Unsupported type {Number.GetType()}");
    }
}

我希望 GetMaxNumber 方法返回该数字类型的最大可能值。如果不是数字类型则抛出异常。

我在这里遇到的主要问题是,我不明白如何在使用 int 的属性(例如 MaxValue)时将 int 之类的东西转换回原始泛型类型。

我该如何完成这项工作?

最佳答案

如果性能不是一个大问题,并且您想避免进行大的切换,您可以通过反射(和 try/catch)来实现

public TValue GetMaxNumber()
{
    try
    {
        return (TValue)typeof(TValue).GetField("MaxValue").GetValue(null);
    }
    catch
    {
        throw new InvalidOperationException($"Unsupported type {typeof(TValue)}");
    }
}

关于c# - 如何在 C# 中获取通用数字类型的最大值和最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68654704/

相关文章:

c# - 从 C# 代码调用 HTTPS JBoss 服务会引发身份验证错误

c# - 返回基于 int 值的类类型

C# - 为什么要放置一个接口(interface)泛型约束而不是仅仅传递接口(interface)类型?

c# - 如何设置 Outlook 文件夹的自定义图标?

C# 获取/读取使用的 DLL 导入

c# - 在 MVC Razor 中回发后保持下拉选择状态?

C# 使用约束泛型仅允许在父类型上运行函数

c# - 使用 Reflection.Emit 实例化具有泛型参数的泛型类型

无法从具有多个返回的 Select 中的用法推断出 C# 类型参数

c# - 将 List<contacts> 插入表格