gpt4 book ai didi

C# 构造函数约束到支持比较运算符的类型

转载 作者:行者123 更新时间:2023-11-30 13:13:29 25 4
gpt4 key购买 nike

如果类型允许比较运算符确保提供给构造函数的第一个值小于第二个值,我该如何创建一个类来存储任何类型的范围?

public class Range<T> where T : IComparable<T>
{
private readonly T lowerBound;
private readonly T upperBound;

/// <summary>
/// Initializes a new instance of the Range class
/// </summary>
/// <param name="lowerBound">The smaller number in the Range tuplet</param>
/// <param name="upperBound">The larger number in the Range tuplet</param>
public Range(T lowerBound, T upperBound)
{
if (lowerBound > upperBound)
{
throw new ArgumentException("lowerBlound must be less than upper bound", lowerBound.ToString());
}

this.lowerBound = lowerBound;
this.upperBound = upperBound;
}

我收到错误:

Error   1   Operator '>' cannot be applied to operands of type 'T' and 'T'  C:\Source\MLR_Rebates\DotNet\Load_MLR_REBATE_IBOR_INFO\Load_MLR_REBATE_IBOR_INFO\Range.cs   27  17  Load_MLR_REBATE_IBOR_INFO

最佳答案

你可以使用

where T : IComparable<T>

... 或者您可以只使用 IComparer<T> 在您的代码中,默认为 Comparer<T>.Default .

后一种方法很有用,因为它允许为那些自然地不能相互比较但可以以自定义、合理的方式进行比较的类型指定范围。

另一方面,这确实意味着您不会在编译时捕获无法比较的类型。

(顺便说一句,创建范围类型会引入一系列有趣的 API 决策,围绕是否允许反转范围、如何跨过它们等。曾经做过,做过,从来都不是完全对结果很满意...)

关于C# 构造函数约束到支持比较运算符的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com