利用linq快速判断给定数字是否包含在某个段范围内

时间:2023-03-09 21:14:43
利用linq快速判断给定数字是否包含在某个段范围内

一、需求:

知道某段范围
0x0020~0x007F
0x00A0~0x017F
0x01A0~0x01CF
0x01F0~0x01FF
0x0210~0x021F
0x1EA0~0x1EFF
给定一个值,快速判断给定值是否在以上编码范围内

二、解决方案


用面向对象的方案解决

1、每个段都有一个最小值,一个最大值,定义一个类

 public Section(int minValue, int maxValue)
{
this.MinValue = minValue;
this.MaxValue = maxValue;
} /// <summary>
/// 存储最小值
/// </summary>
public int MinValue { get; set; } /// <summary>
/// 存储最大值
/// </summary>
public int MaxValue { get; set; }

2、初始化数据

   private static readonly List<Section> lstSections;

         static Program()
{
lstSections = new List<Section>
{
new Section(0x0020, 0x007F),
new Section(0x00A0, 0x017F),
new Section(0x01A0, 0x01CF),
new Section(0x01F0, 0x01FF),
new Section(0x0210, 0x021F),
new Section(0x1EA0, 0x1EFF)
}; }

用linq比较大小验证方法

 /// <summary>
/// Vaid
/// </summary>
/// <param name="value"></param>
/// <returns>True:在这个范围 Fase:不在这个范围</returns>
public static bool IsValidSection(int value)
{
var lstFind = lstSections.FindAll(p => value >= p.MinValue && value <= p.MaxValue);
return lstFind.Count > ;
}

调用该方法:

  static void Main(string[] args)
{ while (true)
{
Console.Write("请输入一个16进制数值:");
var input = Console.ReadLine();
if (input == "q")
{
break;
}
var result = ;
var b = int.TryParse(input.ToUpper(), NumberStyles.AllowHexSpecifier, null, out result);
if (b)
{
Console.WriteLine("{0}-{1}", input, IsValidSection(result) ? "在给定范围内" : "不在给定范围内");
}
else
{
Console.WriteLine("输入值错误");
}
} }