一、需求:
知道某段范围
0x0020~0x007F0x00A0~0x017F0x01A0~0x01CF0x01F0~0x01FF0x0210~0x021F0x1EA0~0x1EFF给定一个值,快速判断给定值是否在以上编码范围内二、解决方案
用面向对象的方案解决
1、每个段都有一个最小值,一个最大值,定义一个类
1 public Section(int minValue, int maxValue) 2 { 3 this.MinValue = minValue; 4 this.MaxValue = maxValue; 5 } 6 7 ///8 /// 存储最小值 9 /// 10 public int MinValue { get; set; }11 12 ///13 /// 存储最大值14 /// 15 public int MaxValue { get; set; }
2、初始化数据
1 private static readonly ListlstSections; 2 3 static Program() 4 { 5 lstSections = new List 6 { 7 new Section(0x0020, 0x007F), 8 new Section(0x00A0, 0x017F), 9 new Section(0x01A0, 0x01CF),10 new Section(0x01F0, 0x01FF),11 new Section(0x0210, 0x021F),12 new Section(0x1EA0, 0x1EFF)13 };14 15 }
用linq比较大小验证方法
////// Vaid /// /// ///True:在这个范围 Fase:不在这个范围 public static bool IsValidSection(int value) { var lstFind = lstSections.FindAll(p => value >= p.MinValue && value <= p.MaxValue); return lstFind.Count > 0; }
调用该方法:
1 static void Main(string[] args) 2 { 3 4 5 while (true) 6 { 7 Console.Write("请输入一个16进制数值:"); 8 var input = Console.ReadLine(); 9 if (input == "q")10 {11 break;12 }13 var result = 0;14 var b = int.TryParse(input.ToUpper(), NumberStyles.AllowHexSpecifier, null, out result);15 if (b)16 {17 Console.WriteLine("{0}-{1}", input, IsValidSection(result) ? "在给定范围内" : "不在给定范围内");18 }19 else20 {21 Console.WriteLine("输入值错误");22 }23 }24 25 }