Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取两个T型变量之间的所有值?_C#_Asp.net_Generics - Fatal编程技术网

C# 如何获取两个T型变量之间的所有值?

C# 如何获取两个T型变量之间的所有值?,c#,asp.net,generics,C#,Asp.net,Generics,如果我有两个T类型的变量,假设两个T类型都相同,那么有可能得到两个变量之间的所有值吗 我在.net 2.0中工作,并基于以下代码构建了一个Range类: 如果我知道类型是DateTime,就可以很容易地在日期之间循环,以便从开始值到结束值。像这样: List<DateTime> values = new List<DateTime>(); for (DateTime d = myRange.Start; d <= myRange.End; d = d.AddDay

如果我有两个T类型的变量,假设两个T类型都相同,那么有可能得到两个变量之间的所有值吗

我在.net 2.0中工作,并基于以下代码构建了一个Range类:

如果我知道类型是DateTime,就可以很容易地在日期之间循环,以便从开始值到结束值。像这样:

List<DateTime> values = new List<DateTime>();

for (DateTime d = myRange.Start; d <= myRange.End; d = d.AddDays(1))
{
    values.Add(d);
}
列表值=新列表();
对于(DateTime d=myRange.Start;d您尝试过吗


您可以这样做,但它只适用于可以通过这种方式进行比较的类型。

我认为这不可能在任何类型T上使用。并非所有表单都有一个可排序的值,它们之间有不同的步骤。0-10之间的整数很简单。上面的示例也是如此


但是,如何从“船”到“卡车”?我认为它不能简单地应用于任何形式。

你所要求的不能用.net中实现的泛型来实现。你最好的办法是定义一个接口,指定你需要的操作,并对
t
应用约束


<>你可以用C++模板来做积分值。在用鸭子打字的语言中也很小。

假设t是一个只有一个值的类型,我看不出这是如何通用地解决的。如果t支持和允许它的范围确定,那么可能是可能的。< / P> < P>你可以做一些事情。用
i可比较的
来实现这一点

公共静态列表GetRange(T开始、T结束、函数增量)
{
列表结果=新列表();
对于(T=开始;T.比较到(结束)<0;T=增量(T))
{
结果:添加(t);
}
返回结果;
}
列表值=GetRange(myRange.Start,myRange.End,d=>d.AddDays(1));

增量函数需要手动提供,原因有两个:首先,一些iComparable没有一个自然的增量函数:例如String。其次,即使有增量函数,也无法找到它。即使是DateTimes示例,也无法确定您想要
AddDays(1)
,而不是
AddSeconds(1)

这正是我想要的……谢谢。
public static List<T> GetRange(T start, T end, Func<T,T> increment)
{
    List<T> result = new List<T>();
    for(T t = start; t.CompareTo(end) < 0; t = increment(t))
    {
        result.Add(t);
    }
    return result;
}

List<DateTime> values = GetRange<DateTime>(myRange.Start, myRange.End, d => d.AddDays(1));