Math.Abs​​(T值)泛型c#

Eco*_*nus 1 c# generics math

我想创建泛型函数Math.Abs​​()但我不知道如何做到这一点.如果我创建一个类Math我不能为T值创建方法Abs,因为我不知道T的类型.

如果有人知道怎么做?

谢谢

Jon*_*eet 9

六种选择:

  • 使用基于执行时类型的反射 T
  • 对您关心的每种类型使用重载
  • 对你关心的每种类型使用if/else
  • Dictionary<Type, Func<object, object>>为您关心的每种类型创建一个包含委托的代理
  • dynamic在.NET 4中使用:

    public T Foo<T>(T value)
    {
        dynamic d = value;
        return Math.Abs(d);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用像马克Gravell的通用运营商的一部分MiscUtil

如果可能的话,我可能会选择过载选项.它会在编译时适当地约束你,并避免任何潜在的耗时拳击/反射.