我正在尝试在数字类型上编写一个扩展方法,以便在我正在构建的流畅测试框架中使用.基本上,我想这样做:
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).
不幸的是,没有代表四种基本操作的接口(+, - ,*,/).有没有人找到一种可行的,可行的方法来实现这一点?
我是VB.Net的人.(因为我必须这样做,因为签署我的支票的人是这样说的.:P)我在Java中长大,当我有机会时,我通常不会在C#中阅读或写作.我今天遇到了一些我从未见过的语法,而且我似乎无法弄明白.
在以下方法声明中,<T>表示什么?
static void Foo <T>(params T [] x)
我已经看到与声明泛型集合和事物一起使用,但我不能为我的生活弄清楚它对这个方法的作用.
如果它很重要,我在考虑一些C#脑筋急转弯时遇到过它.第六个预告片包含整个代码段.
可能重复:
仅对整数的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)"噩梦?或者更糟糕的是,我是否选择为我想要使用的每种类型的数字创建一个类,每个都有相同的内部数学公式?
任何帮助,将不胜感激.谢谢!
我正在编写一个类,它对C#中的每个原始数字类型进行基本相同类型的计算.虽然实际计算更复杂,但可以将其视为计算多个值的平均值的方法,例如
class Calc
{
public int Count { get; private set; }
public int Total { get; private set; }
public int Average { get { return Count / Total; } }
public int AddDataPoint(int data)
{
Total += data;
Count++;
}
}
Run Code Online (Sandbox Code Playgroud)
现在支持double,float和其他定义operator +和operator /的类的相同操作,我首先想到的只是使用泛型:
class Calc<T>
{
public T Count { get; private set; }
public T Total { get; private set; }
public T Average { get { return Count / Total; } }
public T AddDataPoint(T …Run Code Online (Sandbox Code Playgroud) 是否有可能约束的方法,使得其只接收int,double,long或其他数字类型,其具有通常的数值运算(例如+,-,*,/)中所定义?
我有一系列数字:
var seq = new List<int> { 1, 3, 12, 19, 33 };
Run Code Online (Sandbox Code Playgroud)
并且我想将其转换为新序列,其中将数字添加到前面的数字以创建新序列:
{ 1, 3, 12, 19, 33 } --> {1, 4, 16, 35, 68 }
Run Code Online (Sandbox Code Playgroud)
我想出了以下内容,但我不喜欢状态变量'count'.我也不喜欢这样一个事实,即我使用值Enumerable而不采取行动.
int count = 1;
var summed = values.Select(_ => values.Take(count++).Sum());
Run Code Online (Sandbox Code Playgroud)
怎么可能呢?
我执行了以下代码:
using System;
using System.Collections.Generic;
namespace TestReleaseAndDebug
{
public class GClass<T1, T2>
{
public T1 Name { get; set; }
public T2 Age { get; set; }
public void Display()
{
Console.WriteLine("Name: " + Name);
Console.WriteLine("Age: " + Age);
}
}
class Program
{
static void Main(string[] args)
{
GClass<string, int> person = new GClass<string, int>();
person.Name = "RAM";
person.Age = 34;
string name = "RAM";
int age = 34;
Console.WriteLine("Name: " + name);
Console.WriteLine("Age: " + age);
person.Display();
Console.Read(); …Run Code Online (Sandbox Code Playgroud) 是否可以枚举通用约束中"可用"的类型?
T MyMethod<t>() where T : int, double, string
Run Code Online (Sandbox Code Playgroud)
为什么我要这样做是因为我有一个小的评估引擎,并希望编写如下代码:
bool expression.Evaluate<bool>();
Run Code Online (Sandbox Code Playgroud)
要么
int expression.Evaluate<int>();
Run Code Online (Sandbox Code Playgroud)
但我想禁止
MyCustomClass expression.Evalaute<MyCustomClass>();
Run Code Online (Sandbox Code Playgroud)