C#中是否有一个类来处理两个INT(范围为2 INT-1-10)
本文关键字:两个 INT 范围 INT-1-10 是否 有一个 处理 | 更新日期: 2023-09-27 18:19:59
我对C#很陌生,我想知道是否有一个类或数据结构,或者处理以下需求的最佳方法。。。我需要处理一个表示数据范围(例如1-10或5-245)的int的COUPLE,并且我需要一个方法来验证int值是否包含在该范围中。。。我相信在C#中有一个在框架中构建的类来处理我的需求。。。我需要做的是验证INT(例如5)是否包含在值eg(1-10)的范围内。。。
如果我发现没有一个类来处理它,我想使用一个包含2个数字的Struct,并制作我自己的contain方法来测试5是否包含在范围1-10)
如果我发现没有一个类要处理它,我想用一个包含2个数字和制作我自己的Contain方法来测试范围中是否包含51-10)
这实际上是个好主意,因为BCL中没有用于您的场景的内置类。
您正在寻找一个范围类型;.Net框架不包括一个。
您应该按照建议创建一个不可变的(!)Int32Range
结构
您可能希望实现IEnumerable<int>
,以允许用户轻松地循环浏览该范围内的数字。
您需要决定每个绑定是包含的还是独占的
CCD_ 3可能是最明显的选择
无论您选择什么,都应该在XML注释中清楚地记录它。
没有什么能完全满足您的需求。
假设我正确理解你的话,这门课写起来很简单。
class Range
{
public int Low {get; set;}
public int High {get; set;}
public bool InRange(int val) { return val >= Low && val <= High; }
}
Tuple<int,int>
将为您提供部分功能,但您必须添加一个扩展方法才能获得额外的行为。缺点是下界和上界是隐含的Item1
和Item2
,可能会混淆。
// written off-the-cuff, may not compile
public static class TupleExtension
{
public static bool InRange(Tuple<int, int> this, int queryFor)
{
return this.Item1 >= queryFor && this.Item2 <= queryFor;
}
}
如果您想避免创建新类型,可以创建一个扩展:
public static class Extensions
{
public static bool IsInRange(this int value, int min, int max)
{
return value >= min && value <= max;
}
}
然后你可以做一些类似的事情:
if(!value.IsInRange(5, 545))
throw new Exception("Value is out of range.");
我认为您可以使用数组来实现这一点。这里可以找到一些不错的例子和解释:http://www.dotnetperls.com/int-array
AFAIK中没有内置任何内容,但(取决于范围的大小)Enumerable.range可以工作(但不是最优的,因为您实际上存储的是范围中的每个值,而不仅仅是端点)。不过,它确实允许您使用LINQ方法(包括Enumerable.Contains),这可能会派上用场。
const int START = 5;
const int END = 245;
var r = Enumerable.Range(START, (END - START)); // 2nd param is # of integers
return r.Contains(100);
就我个人而言,我可能会继续写这个类,因为它相当简单(如果你想对它进行LINQ,你总是可以通过Enumerable.Range公开IEnumerable<int>
迭代器)