C#Number基类我想写一个C#方法,可以接受任意数字。类似于:publicstaticTSum(Ta,Tb)whereT:number{//(不是真正的代码)returna+b;但是我在C#中没有看到“数字”基类,就像我用过的大多数其他语言一样。数字类型是IComparable、IFormattable、IConvertible、IComparable和IEquatable,但似乎没有任何算术能力。除了对象之外,它们都是没有明显公共超类的结构。(如果我搞砸了,请原谅我,因为我不太熟悉C#结构,也不太熟悉它们与类的关系。)我是不是遗漏了什么,或者无法在编写方法中使用它在C#中执行“a+b”而不明确说明“+”上下文中的a和b是什么?您将不得不求助于使用重载。有点像Math类正在使用像Math.Max这样支持所有数字类型的函数。裁谈会建议的链接也是一个很好的资源。有关类似的讨论,请参阅此SO问题。此外,如果您愿意为每个要使用它的.NetCore数字类型创建一个单独的类型,您可以这样做(稍微摆弄一下)...创建两个名为MyInt和MyDecimal的结构作为CTSInt32facades和Decimal核心类型(它们包含相应类型的内部字段。)每个结构都应该有一个ctor,它将CoreCTS类型的实例作为输入参数。使每个实现成为一个空的命名INumeric接口然后,在泛型方法中,基于这个接口创建约束。下面,除了使用这些方法之外,您还必须构造一个适当的自定义类型的实例而不是CoreCTS类型,并将自定义类型传递给该方法。注意:编写自定义结构以正确模拟核心CTS类型的所有行为是乏味的部分……您必须实现多个内置CLR接口(ICComparable等)并重载所有算术和布尔运算符。..不幸的是,不存在这样的类/接口。int和其他数字类型是ValueTypes。如前所述,您所能做的就是说出whereT:struct。好吧,您可以使用反射来检查类型参数是否实现了加法……但我不确定这是否是个好主意。你能做的最好的就是whereT:struct,它需要一个ValueType;所有数字都是ValueTypes。不幸的是,所有用户定义的结构都是如此,所以这是缺点。没有接受所有数字类的特定泛型。我什至不建议这样做,但您可以考虑对方法中T的类型进行运行时检查,并在T不是int、long、short、float或double时抛出。不幸的是,这在编程时对程序员没有帮助。这是一个很常见的问题;如果您使用的是.NET3.5,则通过Operator类在MiscUtil中有很多支持,它支持内置类型和任何带有运算符(包括“提升”运算符)的自定义类型;特别是,这允许使用泛型,例如:publicstaticTSum(thisIEnumerablesource){Tsum=Operator.Zero;foreach(Tvalueinsource){if(value!=null){sum=Operator.Add(sum,value);}}返回总和;或者另一个例子;复杂以上就是C#学习教程:C#数字基类的全部内容。注意——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
