相关疑难解决方法(0)

C#数值类型的"基类"是什么?

假设我想要一个带有任何数字的方法,是否有可以使用的基类(或其他一些概念)?

据我所知,我必须为所有不同的数字类型(Int32,Int16,Byte,UInt32,Double,Float,Decimal等)进行重载.这看起来非常乏味.或者使用类型"对象"并抛出异常,如果它们不可转换或可分配给double - 这是非常糟糕的,因为它意味着没有编译时间检查.

更新: 好的感谢您的评论,你是对的Scarecrow和Marc,实际上宣称它为Double实际上除了Decimal以外的所有人都适用.

所以我正在寻找的答案是Double - 它在这里就像一个基类,因为大多数数字类型都可以分配给它.(我猜Decimal不能分配给Double,因为它可能会变得太大.)

public void TestFormatDollars() {
    int i = 5;
    string str = FormatDollars(i);   // this is OK
    byte b = 5;
    str = FormatDollars(b);     // this is OK
    decimal d = 5;
    str = FormatDollars(d);     // this does not compile - decimal is not assignable to double
}

public static string FormatDollars(double num) {
    return "$" + num;
}
Run Code Online (Sandbox Code Playgroud)

c# types

46
推荐指数
6
解决办法
3万
查看次数

使用泛型类型的任何优雅方式?

我正在一个小型教育项目中工作,我们必须实现一个n维矩阵.根据上下文,此矩阵可以使用我们自己的内置ComplexNumber结构,System.Double也可以使用非常简单的示例,使用整数类型(主要是System.Int32).

由于应用程序的性质,我们不需要实现闪电般快速的性能.

因此,我的第一个想法是实行Matrix<T>地方T会以某种方式需要被限制在"数字".

这样做的一个明显问题是,语言中没有办法T用定义的运算符约束泛型类型.此外,我没有看到一种简单的方法来重新T合理到合理的类型.

我的问题是:

  1. 有人可以指出我的优雅方式,使用通用类型进行数学运算,不会过多地影响性能,并以某种方式使内置类型工作(如果可能).

  2. 如果Eric读过这篇文章,那么这个功能(通过定义的运算符约束泛型类型)是否会出现在C#设计会议的假设未来版本中,并且它是否已经接近将其纳入语言?

我知道实现一个ComplexMatrix类型并为每个矩阵"子类型"(双重,整数等)创建包装器更容易,更好,并支付我们的复杂类型和矩阵元素发生的任何类型之间的转换的性能成本成为.这个问题更多的是出于对某人如何实施类似场景的好奇心.

c# generics operators

10
推荐指数
1
解决办法
895
查看次数

标签 统计

c# ×2

generics ×1

operators ×1

types ×1