任何人都可以告诉我是否有一种方法可以使用泛型来限制泛型类型参数T:
Int16Int32Int64UInt16UInt32UInt64我知道的where关键字,但无法找到一个接口只有这些类型,
就像是:
static bool IntegerFunction<T>(T value) where T : INumeric
Run Code Online (Sandbox Code Playgroud) 我正在尝试在数字类型上编写一个扩展方法,以便在我正在构建的流畅测试框架中使用.基本上,我想这样做:
public static ShouldBeGreaterThan<T>(this T actual, T expected, string message)
where T : int || T: double || etc...
Run Code Online (Sandbox Code Playgroud)
只是where T : struct不这样做,因为这也将匹配string和bool,可能别的东西,我忘了.有什么我可以做的只匹配数字类型?(实现的具体类型>和<运营商,这样我就可以对它们进行比较.如果这意味着我匹配日期为好,它其实并不重要-扩展仍然会做我的期望.)
我正试图想办法为数字类型创建一个通用类,用于进行一些计算.
我缺少所有数字类型(int,double,float ...)的通用接口吗?
如果没有,创建这样一个班级的最佳方法是什么?
更新:
我想要实现的主要是检查T类型的两个变量之间谁更大.
有没有可行的方法使用泛型来创建一个不依赖于选择存储数据的基类型的数学库?
换句话说,我们假设我想写一个Fraction类.该分数可以由两个整数或两个双精度或其他表示.重要的是基本的四个算术运算都有明确的定义.所以,我希望能够写Fraction<int> frac = new Fraction<int>(1,2)和/或Fraction<double> frac = new Fraction<double>(0.1, 1.0).
不幸的是,没有代表四种基本操作的接口(+, - ,*,/).有没有人找到一种可行的,可行的方法来实现这一点?
可能重复:
仅对整数的C#泛型约束
映入眼帘!
我正在尝试在C#中设置笛卡尔坐标系,但我不想将自己限制为我的坐标值的任何一种数值类型.有时它们可能是整数,有时它们可能是有理数,取决于上下文.
这对我来说是"通用类",但我对如何将类型限制为积分和浮点感到难过.我似乎无法找到涵盖任何实数概念的课程......
public class Point<T> where T : [SomeClassThatIncludesBothIntsandFloats?] {
T myX, myY;
public Point(T x, T y) {
myX = x;
myY = y;
}
}
Point<int> pInt = new Point<int>(5, -10);
Point<float> pFloat = new Point<float>(3.14159, -0.2357);
Run Code Online (Sandbox Code Playgroud)
如果我想要这种自由度,那么当我在课堂上进行计算,除去bool,字符串,对象等时,我是否选择了"typeof(T)"噩梦?或者更糟糕的是,我是否选择为我想要使用的每种类型的数字创建一个类,每个都有相同的内部数学公式?
任何帮助,将不胜感激.谢谢!
我真的很喜欢一个通用的数字类型作为Func<TInput, THere, TResult>下面给定的第二个泛型类型参数,所以我可以提供一个整数或一个双精度或一个小数,当我喜欢.
var _resultSelectors = new Dictionary<string, Func<DateTime, /*here*/ double, DateTime>>();
// so I can do
_resultSelector.Add("foo", (DateTime dt, int x) => ...);
_resultSelector.Add("bar", (DateTime dt, double d) => ...);
_resultSelector.Add("gar", (DateTime dt, float f) => ...);
_resultSelector.Add("har", (DateTime dt, decimal d) => ...);
Run Code Online (Sandbox Code Playgroud)
缺乏:
dynamic关键字,在C#中有没有正确的方法呢?
我猜Java有一个Number类可能符合我的要求,但我想知道C#是否有类似的东西.
我想在C#中没有任何这样的东西,但我想我会要求确定.
我探索了c#源代码参考.我偶然发现有趣的IArithmetic<T>界面.例如,Int32,Double包含评论的实现IArithmetic接口.我对这些细节很感兴趣.据我所知,它试图添加"支持"算术运算.但为什么他们评论?是否添加支持通用"运营商"的方法不好?
假设我们有一个泛型类的想法Matrix<T>哪里T是数字型(Complex或double或者float,int等).
很自然,我们在C#中从in float到doublefrom double进行了隐式转换Complex.一般规则是我们有从较小类型到较大类型的隐式转换.到现在为止还挺好.
现在假设我们正在实现我们的Matrix<T>类型.由于这种新型的方式是数字也(或者至少其持有的数值),这是很自然有隐式转换从Matrix<float>到Matrix<double>,从Matrix<double>对Matrix<Complex>等至少它是好的,有这些像乘数学运算,加等但是这似乎无法正确实现,因为隐式运算符要求至少一个类型与我们实现它的类相同.
示例:下面的代码无法编译,甚至认为它可以解决我的问题.
public abstract partial class Matrix<T>
{
/// <summary>
/// Implicitly converts a matrix to double precision complex numbers.
/// </summary>
public static implicit operator Matrix<Complex64>(Matrix<double> matrix)
{
matrix.ToComplex();
}
/// <summary>
/// Implicitly converts a matrix to double precision real numbers.
/// </summary>
public static implicit …Run Code Online (Sandbox Code Playgroud)