我使用Range
方法来获取字母I.E中值的范围:
char.TryParse(txtFrom.Text, out char fromValue);
char.TryParse(txtTo.Text, out char toValue);
char[] alphabetRange = Enumerable.Range(fromValue, toValue - 'A' + 1)
.Select(i => (Char)i)
.ToArray();
因此,如果fromValue
为B
并且toValue
为D
,它将返回B,C,D
的数组,这是正确的。
问题是,如果用户将fromValue
用作D
,将toValue
用作B
,如何抛出无法完成的异常?
我不会抛出exception,而只是使用一个显示消息框的if / else,但是要检查一个字符是否比另一个字符“更大”,只需使用>
if (fromValue > toValue)
{
MessageBox.Show("'to' character must be greater than 'from' character");
}
else
{
// do what you do now
}
您还可以执行诸如检查大小写一致,处理非=字符输入等操作
我还要注意,Range
的第二个参数是输出范围的length,所以我认为您想要:
Range(fromValue, toValue - fromValue + 1)
或者,您始终可以在两个文本框之间选择Min
和Max
值(无论哪个字符位于哪个文本框中),然后根据需要使用OrderBy
来对ascending
或descending
进行排序如果fromValue
小于或大于toValue
,则打开。
这样,如果用户输入from = 'c'; to = 'a'
,则输出将为c, b, a
。
例如:
char.TryParse(txtFrom.Text, out char fromValue);
char.TryParse(txtTo.Text, out char toValue);
// Get the smallest and largest of the two values
var minVal = Math.Min(fromValue, toValue);
var maxVal = Math.Max(fromValue, toValue);
var alphabetRange = Enumerable
.Range(minVal, maxVal - minVal + 1)
.OrderBy(i => fromValue < toValue ? i : -i) // If from > to, sort by the negative of i
.Select(i => (char) i).ToArray();
• 使用按钮和消息处理制作 ConversationHandler 的正确方法
• Excel 脚本不断给出错误“范围合并:您无法执行请求的操作。”
• Excel VBA - 将大范围单元格从一个工作簿复制/粘贴到另一个工作簿的更有效方法
• 来自文件的 sscanf 输入缓冲区在文件读取范围内失败但仅在文件读取范围之外工作为什么?
• 这里有抄袭吗?
• 当对每个范围中的行进行任何更改时,我想在同一工作表上添加时间戳和应用程序用户名多个不同范围
• 如何将 var_export 格式化为 php5.4 数组语法
• 我将如何使用能力守卫在模块 1 上创建一个只能由模块 2 调用的函数?