我使用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();