我绝对不能硬编码的数据类型。我需要严格的数据输入。我必须使用TValue a < = TValue b。再次,绝对没有办法做像(双)一样的东西。这是基本库实现的一部分。唯一具体关于通用值的是它们是静态类型。 IComparable和其他界面似乎不起作用。必须实现一个通用的小于和大于操作
回答
为什么IComparable无法为您工作?
您可能无法获得使用“<”和“>”符号的语法糖,但您可以检查CompareTo的结果是否小于或大于0,这会给出相同的信息。
你甚至可以写一个很好的扩展方法,使其更容易使用。
static void Main(string[] args)
{
Console.WriteLine(1.IsGreaterThan(2));
Console.WriteLine(1.IsLessThan(2));
}
public static bool IsGreaterThan<T>(this T value, T other) where T : IComparable
{
return value.CompareTo(other) > 0;
}
public static bool IsLessThan<T>(this T value, T other) where T : IComparable
{
return value.CompareTo(other) < 0;
}
或限制为'IComparable
你能更准确地处理你的数据类型和用例吗?
毕竟,要实现一个比较操作,你需要一些关于类的信息;一个完全通用的实现通常没有比较两个对象所需的信息 - 除非你想在GetHashCode()或ToString()上对它们进行排序,这是非常奇怪的事情。
有用于类型安全的比较各种通用接口:
IComparable<T>
对对象本身IComparer<T>
作为外部比较实现。
如果您在自己的类型实现IComparable
或IComparable<T>
,那么你可以使用Comparer<T>.Default
自动获取后者的变体 - 这使得消费者比较矮一点写的,是需要通用约束替代类型为IComparable<T>
。
+1用于解释“Comparer
只需使用System.Collections.Generic.Comparer<T>.Default.Compare(x,y)
- 并查找负值,正值和0返回值。
这同时支持IComparable<T>
和IComparable
,并且可以用于类,结构和结构体中的Nullable<T>
。
-ve和+ ve是什么? – Gabe
这似乎在伎俩。我正在使用Visual Studio Express 2010 Beta,而Intellisense似乎没有认识到这种情况。非常奇怪的行为。 –
@gabe:他们是写作“积极”和“消极”的简写方式。 –
- 1. 索引必须大于或等于零且小于参数列表的大小
- 2. 对于字符操作数,第一个和最后一个操作数冒号操作必须是char
- 3. UINavigationBar小于它必须是
- 4. C#ExecuteScalar() - 必须小于Infinity?
- 5. 'maxValue'必须大于零
- 6. 值必须大于无穷
- 7. 检查数组的总和必须小于最大时间
- 8. ValueError:ordinal必须大于等于1
- 9. 如何实现大于或小于php
- 10. Typescript number必须小于1并大于0
- 11. 我的equals和hashcode是否必须基于compareTo方法实现?
- 12. 使用Django模板lanuage实现大于和小于
- 13. 最大年龄必须大于最小年龄通过使用jquery
- 14. Crystal Reports - 下标必须介于1和数组大小之间
- 15. 必须为非负数且小于集合的大小
- 16. 为大于和小于成一个
- 17. 索引(基于零)必须大于或等于零且小于参数列表(VB.NET)的大小
- 18. 插入时出错......索引(基于零)必须大于或等于零并小于参数列表的大小
- 19. 索引(基于零)必须大于或等于零并小于参数的大小
- 20. AWS Lambda错误:解压缩大小必须小于262144000字节
- 21. 布尔必须只有一个参数==操作符的实现文件
- 22. “inc ecx”指令操作数必须是相同的大小?
- 23. 对于请求在操作UploadPhotoStream是一个流操作必须有一个参数的类型是流
- 24. Uniform1dMesher中的“end必须大于start”
- 25. 实现大于和小于cakephp模型sql
- 26. OpenGraph操作必须经过批准才能用于测试吗?
- 27. 错误:索引(从零开始)必须大于或等于零且小于参数列表的大小
- 28. 索引(从零开始)必须大于或等于零并小于参数列表的大小IBM .net core
- 29. 索引(从零开始)必须大于或等于零并小于参数列表的大小
- 30. 索引(从零开始)必须大于或等于零并小于参数列表的大小
问题是...? – Krab
你给了+1,同时也承认你不知道问题是什么? :-) –