C# 如何获取两个T型变量之间的所有值?
如果我有两个T类型的变量,假设两个T类型都相同,那么有可能得到两个变量之间的所有值吗 我在.net 2.0中工作,并基于以下代码构建了一个Range类: 如果我知道类型是DateTime,就可以很容易地在日期之间循环,以便从开始值到结束值。像这样: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
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));